系列文章目录
基于PyQt5的桌面图像调试仿真平台开发(1)环境搭建
基于PyQt5的桌面图像调试仿真平台开发(2)UI设计和控件绑定
基于PyQt5的桌面图像调试仿真平台开发(3)黑电平处理
基于PyQt5的桌面图像调试仿真平台开发(4)白平衡处理
基于PyQt5的桌面图像调试仿真平台开发(5)亮度处理
基于PyQt5的桌面图像调试仿真平台开发(6)去马赛克
基于PyQt5的桌面图像调试仿真平台开发(7)伽马矫正
基于PyQt5的桌面图像调试仿真平台开发(8)锐化
基于PyQt5的桌面图像调试仿真平台开发(9)去噪
基于PyQt5的桌面图像调试仿真平台开发(10)色彩矩阵
基于PyQt5的桌面图像调试仿真平台开发(11)清晰度测试
基于PyQt5的桌面图像调试仿真平台开发(12)图像灰度显示
基于PyQt5的桌面图像调试仿真平台开发(13)图像边缘显示
基于PyQt5的桌面图像调试仿真平台开发(14)色彩增强
基于PyQt5的桌面图像调试仿真平台开发(15)图像融合
工程代码:https://gitee.com/xiaoshixiao00/py-ispp
目录
系列文章目录
前言
一、是什么?
二、开发步骤和演示
1.怎么实现
2.编写和测试
前言
图像边缘显示也就是图像边缘检测,常用于图像锐化等图像增强算法,图像锐化就是边缘检测后增强,其实是边缘检测的一种运用。
一、是什么?
图像边缘检测是指通过计算图像中像素值变化的梯度或差异来识别出图像中物体的边缘。常用的边缘检测算法有Sobel算子、Prewitt算子、Laplacian算子、Canny算子等。这些算子通过对图像中像素的灰度值或颜色值进行差分运算,找出像素值变化较大的区域,从而得到图像中物体的边缘信息。边缘检测在图像处理与计算机视觉领域中有着广泛的应用,例如目标检测、图像分割、人脸识别等。
二、开发步骤和演示
1.怎么实现
和前面锐化一样,直接调用opencv的梯度算子即可,
cv2.Sobel(image_rgb,cv2.CV_64F,0,1,ksize=5)
cv2.Laplacian(image_rgb,cv2.CV_64F)
cv2.Scharr(image_rgb,cv2.CV_64F,0,1)
cv2.Canny(image_rgb,100,200)
2.编写和测试
①,开发图像ui控件和绑定事件
参考基于PyQt5的桌面图像调试仿真平台开发(3)黑电平处理_上天肖的博客-CSDN博客
②,算法开发实现
和锐化不同的是,这里支持检测边缘,不需要原图像无边缘的信息,所以进行梯度检测后,直接将检测后的结果显示出来即可。
#图像Sobel检测
def proc_image_sobel_detect(image_rgb):
print("proc_image_sobel_detect,")
result = cv2.Sobel(image_rgb,cv2.CV_64F,0,1,ksize=5)
#sobel处理后数据为浮点数,需要转为整数
result = np.around(result)
result = result.clip(0, 255).astype('uint8')
#cv2.imshow("sobel",result)
return result
#图像Laplacian
def proc_image_laplacian_detect(image_rgb):
print("proc_image_laplacian_detect,")
result = cv2.Laplacian(image_rgb,cv2.CV_64F)
#需要转为整数
result = np.around(result)
result = result.clip(0, 255).astype('uint8')
return result
#图像Scharr
def proc_image_scharr_detect(image_rgb):
print("proc_image_scharr_detect,")
result = cv2.Scharr(image_rgb,cv2.CV_64F,0,1)
# 需要转为整数
result = np.around(result)
result = result.clip(0, 255).astype('uint8')
print("result:", result.shape)
return result
#图像Canny
def proc_image_canny_detect(image_rgb):
print("proc_image_canny_detect,")
result = cv2.Canny(image_rgb,100,200)
# 需要转为整数
result = np.around(result)
result = result.clip(0, 255).astype('uint8')
#cv2.imshow("canny", result)
print("result:",result.shape)
#需要从灰度图转为全彩
result = cv2.cvtColor(result, cv2.COLOR_GRAY2RGB)
print("result:", result.shape)
return result
③,演示
导入原图像
点击图像边缘,选择算子,再点击确定,即可在右边显示梯度算子处理后的图像。
下面是四种梯度算子处理后的图像差异,不同算法的差异还和梯度算子参数有关。
总结
图像边缘检测原理就是求图像梯度,梯度检测原理就是离散函数求导。