赞
踩
1.灰度直方图
2.原图
3.灰度图
4.反转图像
5.二值化图像
6.边缘检测
7.均值迁移模糊
8.双边滤波
可正常运行,需要安装对应的库。安装如下:(在虚拟环境中或终端)
OpenCV安装,使用清华镜像源:
pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple/
matplotlib安装,使用清华镜像源:
pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple/
纯代码,无名词概念解释。需要的自行百度。
(测试时版本:python:3.10,cv2:4.7.0,matplotlib:3.7.1)
import cv2 from matplotlib import pyplot as plt import matplotlib def image_processing(image_input): # cv2.normalize(image_input, image_input, 0, 255, cv2.NORM_MINMAX) # 将图片的值进行范围调整,使用的放缩方式是 min_max 的方式 #cv2.convertScaleAbs(image_input, image_input) #图像增强 image_H = cv2.cvtColor(image_input, cv2.COLOR_BGR2GRAY) #将图像转为灰度图 image_F = cv2.bitwise_not(image_input) #图像反转,黑变白,白变黑 threshold, image_B = cv2.threshold(image_H, 0, 255, cv2.THRESH_OTSU) #输出阈值和二值化图像 ''' 自行设置阈值:(通过修改第2,3个参数) THRESH_BINARY 超过阈值的值为最大值,其他值是0。THRESH_BINARY_INV 超过阈值的值为0,其他值为最大值。 THRESH_TRUNC 超过阈值的值等于阈值,其他值不变。THRESH_TOZERO 超过阈值的值不变,其他值为0。 THRESH_TOZERO_INV 超过阈值的值为0,其他值不变。 自动获取阈值: THRESH_OTSU:适用于双波峰。 THRESH_TRIANGLE:适用于单波峰。 ''' image_C = cv2.Canny(image_H, 0, 256, L2gradient=True) #边缘检测 ''' image:要进行边缘检测的输入图像(单通道)。 threshold1:第一个阈值,用于边缘检测中的滞后阈值。 threshold2:第二个阈值,用于边缘检测中的滞后阈值。 edges:可选,用于存储边缘检测的结果。 apertureSize:可选,Sobel算子的大小。 L2gradient:可选,True:使用L2范数运算,False:使用L1范数运算。 ''' image_M = cv2.pyrMeanShiftFiltering(image_input, 15, 50, 1, termcrit=(cv2.TERM_CRITERIA_MAX_ITER+cv2.TERM_CRITERIA_EPS, 5, 1)) #均值迁移模糊 ''' src:输入图像,8位,三通道的彩色图像,不要求必须是RGB格式。 sp:漂移物理空间半径大小。 sr:漂移色彩空间半径大小。 maxLevel:可选,金字塔的最大层数。 termcrit:可选,迭代终止条件,迭代次数满足终止,迭代目标与中心点偏差满足终止,或者两者的结合,由最后两位参数确定。 ''' image_S = cv2.bilateralFilter(image_input, 0, 10, 50) #双边滤波 ''' src:输入图像,单通道或三通道。 d:邻域的直径,如果是小于等于 0,则由 sigmaSpace 计算得到。 sigmaColor:颜色空间滤波器的标准差。值越大表示邻域中更多的颜色被混合。 sigmaSpace:空域滤波器的标准差。更大的值代表更大范围内的像素(颜色相近)会被相互影响。 当 d 大于 0 的时候,sigmaSpace 被忽略,否则 d 由 sigmaSpace 计算得到。 borderType:外延模式。 ''' image = cv2.cvtColor(image_input, cv2.COLOR_BGR2RGB) image_H = cv2.cvtColor(image_H, cv2.COLOR_BGR2RGB) # cv2 读取的是 [B,G,R] ,转化成顺序为 [R,G,B] 的格式 image_B = cv2.cvtColor(image_B, cv2.COLOR_BGR2RGB) image_C = cv2.cvtColor(image_C, cv2.COLOR_BGR2RGB) image_M = cv2.cvtColor(image_M, cv2.COLOR_BGR2RGB) image_S = cv2.cvtColor(image_S, cv2.COLOR_BGR2RGB) return image, image_H, image_F, image_B, image_C, image_M, image_S if __name__ == "__main__": plt.rcParams['font.sans-serif'] = ['SimHei'] #用来显示中文,若无此字体可自行下载或将标签改为英文 plt.title('峰值图') # plt.rcParams['axes.unicode_minus'] = False # 用来显示负号 image = cv2.imread("可莉.png") #图片地址,相对路径即可。 image_New = image_processing(image) '''显示图像''' plt.subplot(4, 2,1) plt.hist(image.ravel(), 256) plt.axis('on') #坐标轴 plt.title('灰度直方图') #标签 plt.subplot(4, 2, 2) plt.imshow(image_New[0]) plt.axis('off') plt.title('原图') plt.subplot(4, 2, 3) plt.imshow(image_New[1]) plt.axis('off') plt.title('灰度图') plt.subplot(4, 2, 4) plt.imshow(image_New[2]) plt.axis('off') plt.title('反转图像') plt.subplot(4, 2, 5) plt.imshow(image_New[3]) plt.axis('off') plt.title('二值化图像') plt.subplot(4, 2, 6) plt.imshow(image_New[4]) plt.axis('off') plt.title('边缘检测') plt.subplot(4, 2, 7) plt.imshow(image_New[5]) plt.axis('off') plt.title('均值迁移模糊') plt.subplot(4, 2, 8) plt.imshow(image_New[6]) plt.axis('off') plt.title('双边滤波') plt.tight_layout() #自动调整子图间距 plt.show()
新手上路,望批评指正,一起讨论。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。