目录
一、图像二值化
1.效果
2.源码
import cv2 import numpy as np import matplotlib.pyplot as plt # img = cv2.imread(\'test.jpg\') #这几行是对图像进行降噪处理,但事还存在一些问题。 # dst = cv2.fastNlMeansDenoisingColored(img,None,10,10,7,21) # plt.subplot(121),plt.imshow(img) # plt.subplot(122),plt.imshow(dst) # plt.show() fn = \"cell.png\" if __name__ == \'__main__\': print(\'loading %s\' % fn) img = cv2.imread(fn) #读取图像 修改上方 fn的路径即可 sp = img.shape print(sp) #在编译结果处显示图片的信息 这行没啥用 # 获取图像大小 sz1 = sp[0] #长 sz2 = sp[1] #宽 print(\'width:%d\\nheight:%d\' % (sz2,sz1)) #控制窗口显示的比例 # 创建一个窗口显示图像 cv2.namedWindow(\'img\') #这行没啥用 控制显示图片窗口的名字 cv2.imshow(\'img\',img) #显示图片 # 复制图像矩阵,生成与源图像一样的图像,并显示 myimg2 = img.copy(); cv2.namedWindow(\'myimg2\') #这行没啥用 控制显示图片窗口的名字 cv2.imshow(\'myimg2\',myimg2) # 复制并转换为灰度化图像并显示 myimg1 = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #灰度值函数 cv2.namedWindow(\'myimg1\') cv2.imshow(\'myimg1\',myimg1) #显示灰度处理后的函数 cv2.imwrite(\'gray.jpg\', myimg1) #保存当前灰度值处理过后的文件 cv2.waitKey() #第一个参数是保存文件的名称,必须加jgp,png等的后缀否则报错。第二个参数是保存的对象 cv2.destroyAllWindows()
二、图像二值化(调节阈值)
1.源码一
代码如下(示例):
import cv2 def nothing(): # 定义回调函数 pass def image_processing(img, Gauss_flag=1, Color_flag=1, Gray_flag=0): # 图像预处理 # 高斯滤波器平滑图像 if Gauss_flag == 1: img = cv2.GaussianBlur(img, (3, 3), 0) # 均衡彩色图像的直方图 if Color_flag == 1: img = cv2.cvtColor(img, cv2.COLOR_BGR2YUV) # 均衡灰度图像的直方图 if Gray_flag == 1: img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 将彩色图像转为灰度图像 img = cv2.equalizeHist(img) return img def image_canny(img): # 图像边缘检测 # 设置窗口 cv2.namedWindow(\'Canny\') # 创建滑动条,分别控制各个参数 cv2.createTrackbar(\'threshold1\', \'Canny\', 50, 300, nothing) # 阈值1 cv2.createTrackbar(\'threshold2\', \'Canny\', 100, 300, nothing) # 较大的阈值2用于检测图像中明显的边缘 # cv2.createTrackbar(\'apertureSize\', \'Canny\', 0, 2, nothing) # Sobel算子大小(3,5,7) cv2.createTrackbar(\'L2gradient\', \'Canny\', 0, 1, nothing) # 参数(布尔值):true:使用更精确的L2范数(两个方向的倒数的平方和再开放),false:使用L1范数(直接将两个方向导数的绝对值相加) while (1): # 返回滑动条所在位置的值 threshold1 = cv2.getTrackbarPos(\'threshold1\', \'Canny\') # 阈值1 threshold2 = cv2.getTrackbarPos(\'threshold2\', \'Canny\') # 阈值2 L2gradient = cv2.getTrackbarPos(\'L2gradient\', \'Canny\') # 参数 # aperturesize = cv2.getTrackbarPos(\'apertureSize\', \'Canny\') # Sobel算子大小 # size = aperturesize * 2 + 3 # Sobel算子大小(3,5,7) # Canny边缘检测 img_edges = cv2.Canny(img, threshold1, threshold2, L2gradient=L2gradient) # 显示边缘化图像 cv2.imshow(\'Canny\', img_edges) if cv2.waitKey(1) == ord(\'q\'): # 按q退出 break elif cv2.waitKey(1) == ord(\'s\'): # 按s保存图像到原图像所在目录,命名为output.jpg,再退出! cv2.imwrite(\'\\\\\'.join(img_path.split(\'\\\\\')[:-1]) + \'\\\\output.jpg\', img_edges) print(\"图像成功保存\") break cv2.destroyAllWindows() if __name__ == \"__main__\": img_path = input(\"请输入图片地址(如E:\\\\Code\\\\xx.jpg):\") # 输入原图像地址 guass_flag = int(input(\"是否进行高斯滤波(输入1进行,输入0不进行):\")) # 输入1为进行高斯滤波,输入0为不进行 color_flag = int(input(\"是否均衡彩色图像(输入1进行,输入0不进行):\")) # 输入1为进行彩色图像均衡,输入0为不进行 gray_flag = int(input(\"是否均衡灰度图像(输入1进行,输入0不进行):\")) # 输入1为进行灰度图像均衡,输入0为不进行 # 载入图像 image = cv2.imread(img_path) # 图像预处理 img = image_processing(image, Gauss_flag=guass_flag, Color_flag=color_flag, Gray_flag=gray_flag) # 显示原图像 cv2.imshow(\'Original\', image) # 显示预处理后图像 cv2.imshow(\'Pretreatment\', img) # 图像边缘检测 image_canny(img)
2.源码二
代码如下(示例):
import cv2 #载入图片 img_original=cv2.imread(r\'E:\\py\\python3.7\\test2\\test14yuzhi\\cell.png\') #设置窗口 cv2.namedWindow(\'Canny\') #定义回调函数 def nothing(x): pass #创建两个滑动条,分别控制threshold1,threshold2 cv2.createTrackbar(\'threshold1\',\'Canny\',50,400,nothing) cv2.createTrackbar(\'threshold2\',\'Canny\',100,400,nothing) while(1): #返回滑动条所在位置的值 threshold1=cv2.getTrackbarPos(\'threshold1\',\'Canny\') threshold2=cv2.getTrackbarPos(\'threshold2\',\'Canny\') #Canny边缘检测 img_edges=cv2.Canny(img_original,threshold1,threshold2) #显示图片 cv2.imshow(\'original\',img_original) cv2.imshow(\'Canny\',img_edges) if cv2.waitKey(1)==ord(\'q\'): break cv2.destroyAllWindows()
© 版权声明
THE END
暂无评论内容