图像处理工具设计

简介: 该文章提供了一个Python图像处理工具的设计,包括提高图像对比度、提取边缘、视频帧拆分、图像滚动测试和像素连接等功能的实现代码。

图像处理工具设计

import cv2 as cv
import numpy as np
#
'''
函数功能:
Gramm 提高图像对比度
img:输入图像
power1:gramm值,越大对比度越大
k:亮度,输出图像亮度倍数
'''
def gama_transfer(img,power1,k):
    k/=2.0
    if len(img.shape) == 3:
         img= cv.cvtColor(img,cv.COLOR_BGR2RGB)
    img = 255*np.power(img/255,power1)
    img = np.around(img)
    img[img>255] = 255
    out_img = img.astype(np.uint8)
    out_img = cv.addWeighted(out_img, k, out_img, k, 0)
    return out_img

'''
函数功能:
提取边缘,
k为边缘亮度
'''
def Soble_Transfer(grayImg,k):
    k/=2
    if len(grayImg.shape) == 3:
         grayImg= cv.cvtColor(grayImg,cv.COLOR_BGR2RGB)

    x = cv.Sobel(grayImg, cv.CV_16S, 1, 0)  # 对x求一阶导
    y = cv.Sobel(grayImg, cv.CV_16S, 0, 1)  # 对y求一阶导
    absX = cv.convertScaleAbs(x)
    absY = cv.convertScaleAbs(y)
    # edge_output=cv.Canny(absX,absY,50,150)
    Sobel = cv.addWeighted(absX, k, absY, k, 0)
    return Sobel


'''
函数功能:
将视频拆分成帧
VideoPath:输入视频的地址
dstPath:拆分后输出图片的地址
'''
import os
def Video2Imgs(VideoPath,dstPath):
    if not os.path.isdir(dstPath):
        os.mkdir(dstPath)
    capture=cv.VideoCapture(VideoPath)#
    if not capture.isOpened():
        print('not Open this Video')
        exit(0)
    ret,frame=capture.read()
    index=0
    while ret:
        cv.imwrite(os.path.join(dstPath,str(index)+'.jpg'),frame)
        print(os.path.join(dstPath,str(index)+'.jpg'))
        ret, frame = capture.read()
        index+=1
        cv.waitKey(1)
    capture.release()

'''
函数功能:
输入图片,然后我们进行图片的Gramm与对比度亮度提升的最佳比例滚动测试,便于调参

'''
def task():
    pass
def gra2conTrackbar(img):
    cv.namedWindow('image',256)
    cv.createTrackbar('Contrast','image',100,1000,task)
    cv.createTrackbar('Gramm','image',100,1000,task)
    cv.createTrackbar('Thres','image',100,255,task)
    cv.createTrackbar('Sobel', 'image', 100, 1000, task)
    kernel=cv.getStructuringElement(0,(3,3))

    while True:
        con=cv.getTrackbarPos('Contrast','image')
        gra=cv.getTrackbarPos('Gramm','image')
        th=cv.getTrackbarPos('Thres','image')
        so=cv.getTrackbarPos('Sobel','image')

        img1=cv.cvtColor(img,cv.COLOR_RGB2GRAY)
        img1=gama_transfer(img1,gra/100,con/100)
        #img2 = Soble_Transfer(img1, so / 100)
        # print(con/100)
        img2 = cv.erode(img1, kernel)
        img2 = cv.dilate(img2, kernel)
       # ConnectGrayImg(img2,5,30)



        ret3, th3 = cv.threshold(img1, th, 255, cv.THRESH_OTSU)
        contours,_ = cv.findContours(th3, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)  # 根据二值图找轮廓
        cv.drawContours(img1, contours, -1, (0, 0, 255), 3)  # 把轮廓画在原图上(0,0,255) 表示 RGB 三通道,红色

        htich=np.hstack((img1,img2,th3))
        cv.imshow('image',htich)
        if cv.waitKey(1)&0xFF==27:
            break
    cv.destrayAllWindow()

'''
函数功能:
遍历图像,并连接最近的像素
img:输入图像
i,j:当前像素的位置
k:基于当前位置,向外检索曼哈顿距离小于等于k的像素,并连接
thre:像素值当大于threshold时才连接
'''
dicPix=dict()#保存该像素被连接次数
def ConnectGrayImg(img,k,thre):
    initPix(img)
    Row=img.shape[0]#高
    Col=img.shape[1]#宽
    tempImg2=np.zeros_like(np.ones_like(img))
    for i in range(Row):
        for j in range(Col):
            if dicPix[i*Row+j]<2:
                x,y=getNearPix(img,i,j,k,thre)

                if x!=-1 and y!=-1 and dicPix[x * Row + y]<2:
                    # 找到最近的点之后就连线,并标记来过
                    print(x * Row + y)
                    dicPix[i * Row + j] += 1
                    dicPix[x * Row + y] += 1
                    cv.line(tempImg2,(x,y),(i,j),(250,250,250),1)

    cv.imshow('11',tempImg2)
    cv.waitKey(0)
from queue import Queue
'''
函数功能:
获取距离某个图像的一个像素的最近像素的位置
基于广度搜索可求出最近像素点位置
'''
def getNearPix(img,i,j,k,th1):
    RowMax=img.shape[0]#高
    ColMax=img.shape[1]#宽
    #Channel=img.shape[2]#通道数


    lrow,rrow=max(0,i-k),min(RowMax-1,i+k)
    lcol,rcol=max(0,j-k),min(ColMax-1,j+k)

    vis=[[0,1],[0,-1],[1,-1],[1,0],[1,1],[-1,-1],[-1,0],[-1,1]]
    q=Queue()
    q.put(i*ColMax+j)#将当前像素压入
    dicBook=dict()#创建一个字典,避免重复添加
    dicBook[i*ColMax+j]=1
    dicBook = dict()  # 创建一个字典,避免重复添加
    while not q.empty():
        nowPix=q.get()
        nowrow,nowcol=nowPix//ColMax,nowPix%ColMax
        # 如果当前像素值大于等于阀值,且被连接的次数小于2则返回
        if img[int(nowrow)][int(nowcol)]>=th1 and dicPix[int(nowrow)*ColMax+int(nowcol)]<2:
            return nowrow,nowcol
        for i in range(8):
            trow=nowrow+vis[i][0]
            tcol=nowcol+vis[i][1]
            #判断是否之前遍历过该点,并且该点没有越界
            if trow>=lrow and trow<=rrow and tcol>=lcol and tcol<=rcol and trow*ColMax+tcol not in dicBook:
                dicBook[trow * ColMax + tcol] = 1
                q.put(trow * ColMax + tcol)        #将当前位置像素压入
    # 如果没有找到最近的点,则返回-1,-1
    return -1,-1
'''
函数功能:
为图片的每一个像素位置赋值遍历次数为0
'''
def initPix(img):
    for i in range(img.shape[0]+1):
        for j in range(img.shape[1]+1):
            dicPix[i*img.shape[1]+j]=0


if __name__=='__main__':
    img=cv.imread('tempImg/3.jpg')
    try:
        img.shape
    except:
        print('not find this image')
        exit(0)
    gra2conTrackbar(img)
相关文章
|
存储 监控 f2etest
前端故障演练的探索与实践 | D2分享视频+文章
这些年来,随着前端技术的演进,特别是serverless、跨端、端计算等新技术的引入,前端架构的复杂程度成爆炸式增长。我们尝试通过前端故障演练来提升前端安全生产的水位。
前端故障演练的探索与实践 | D2分享视频+文章
|
10月前
|
弹性计算 关系型数据库 MySQL
阿里云服务器搭建网站教程:经济型e实例2核2G快速搭建网站图文教程参考
目前在阿里云的活动中,轻量应用服务器2核2G3M带宽只要68元1年,2核4G4M带宽只要298元1年。云服务器ECS经济型e实例2核2G 3M固定带宽,价格只要99元/1年,新老用户都可购买,企业用户购买2核4G5M带宽199元一年,为用户提供长期权益。这些都是个人和普通企业用户搭建网站使用较多的云服务器,本文为大家展示使用经济型e实例2核2G3M带宽快速搭建网站的相关教程,以供参考。
581 18
|
9月前
|
人工智能 运维 数据可视化
1分钟集成DeepSeek满血版!搭建智能运维助手
阿里云 AI 搜索开放平台面向企业及开发者提供丰富的组件化AI搜索服务,本文将重点介绍基于AI搜索开放平台内置的 DeepSeek-R1 系列大模型,如何搭建 Elasticsearch AI Assistant。
998 173
1分钟集成DeepSeek满血版!搭建智能运维助手
|
10月前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
眼疾识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了4种常见的眼疾图像数据集(白内障、糖尿病性视网膜病变、青光眼和正常眼睛) 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,实现用户上传一张眼疾图片识别其名称。
547 5
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
|
域名解析 弹性计算 Linux
阿里云服务器搭建网站教程
阿里云服务器搭建网站教程,使用阿里云服务器快速搭建网站教程,先为云服务器安装宝塔面板,然后在宝塔面板上新建站点,阿里云服务器网以搭建WordPress网站博客为例,来详细说下从阿里云服务器CPU内存配置选择、Web环境、域名解析到网站上线全流程
592 0
|
存储 数据安全/隐私保护 云计算
多云网络环境:定义、优势与挑战
多云网络环境:定义、优势与挑战
302 5
|
缓存 云计算
这个夏天,追光动画在阿里云上“绘出”《长安三万里》
追光动画已和阿里云合作多年,从《阿唐奇遇》到《白蛇2:青蛇劫起》、《新神榜:杨戬》和这次的《长安三万里》等。
这个夏天,追光动画在阿里云上“绘出”《长安三万里》
|
存储 人工智能 搜索推荐
【2023年第十一届泰迪杯数据挖掘挑战赛】C题:泰迪内推平台招聘与求职双向推荐系统构建 建模及python代码详解 问题一
本文详细介绍了第十一届泰迪杯数据挖掘挑战赛C题的解决方案,包括爬取泰迪内推平台的招聘与求职信息、构建企业和求职者画像、开发岗位匹配度与求职者满意度模型以及设计招聘求职双向推荐模型的步骤和Python代码实现。
228 2
【2023年第十一届泰迪杯数据挖掘挑战赛】C题:泰迪内推平台招聘与求职双向推荐系统构建 建模及python代码详解 问题一
|
机器学习/深度学习 算法 数据挖掘
从零到精通:Scikit-learn在手,数据分析与机器学习模型评估不再难!
【7月更文挑战第25天】在数据科学中,模型评估是理解模型泛化能力的关键。对新手来说,众多评估指标可能令人困惑,但Scikit-learn简化了这一过程。
261 2
|
JavaScript 前端开发 数据格式
URL编码【详解】——Javascript对URL进行编码解码的三种方式的区别和使用场景,axios请求拦截器中对get请求的参数全部进行URL编码
URL编码【详解】——Javascript对URL进行编码解码的三种方式的区别和使用场景,axios请求拦截器中对get请求的参数全部进行URL编码
886 0