首页 > 其他 > 详细

图像边缘识别检测

时间:2019-04-05 14:44:18      阅读:146      评论:0      收藏:0      [点我收藏+]

博主用的是python3,不过在结尾也有c++方法的地址,供大家参考学习,图像边缘识别需要安装opencv。网上也有一部分人用的是PIL,我在查找了一些资料,并看了一些人的评论后决定用opencv,也推荐各位用。

我简单的理解了一下图像边缘识别的方法,总结为以下几点:

1、了解电脑中图片的存储方式

2、什么是算子

3、获取图片像素——行数,列数,图片的通道数(这是彩色图片,灰度图像没有通道数)

4、进行图片边缘识别检测

首先应该了解什么是图片,图片有很多种,我并不完全懂,这里我说一下256色图片,256也就是2的8次方,在存储的方式上使用一个字节,也就是8位0和1的二进制表示的,从0开始到255结束,所以说他是16色图片数据量的两倍。

详见:https://baike.baidu.com/item/%E7%AE%97%E5%AD%90/970194?fr=aladdin

然后是算子,简单来说就是一种映射,和我们中学学的函数并无区别。但是在图像边缘识别的方法中有两个算子,根据我的理解,是分别计算得到纵向和横向的灰度图。

详见:https://baike.baidu.com/item/%E7%AE%97%E5%AD%90/970194?fr=aladdin

首先我贴出我查看别人博客认为图片边缘识别最好的一版的代码:

 1 import cv2;
 2 import numpy as np
 3 
 4 img = cv2.imread(r图片地址)

首先导入图片数据。

 1 x = cv2.Sobel(img, cv2.CV_16S, 1, 0, ksize=-1)
 2 y = cv2.Sobel(img, cv2.CV_16S, 0, 1, ksize=-1)
 3 # ksize=-1 Scharr算子
 4 # cv2.convertScaleAbs(src[, dst[, alpha[, beta]]])
 5 # 可选参数alpha是伸缩系数,beta是加到结果上的一个值,结果返回uint类型的图像
 6 Scharr_absX = cv2.convertScaleAbs(x)  # convert 转换  scale 缩放
 7 Scharr_absY = cv2.convertScaleAbs(y)
 8 result = cv2.addWeighted(Scharr_absX, 0.5, Scharr_absY, 0.5, 0)
 9 blur = cv2.GaussianBlur(img, (3, 3), 0)  # 用高斯滤波处理原图像降噪
10 canny = cv2.Canny(blur, 50, 150)  # 50是最小阈值,150是最大阈值
11 cv2.imshow(canny, canny)
12 cv2.waitKey(0)
13 cv2.destroyAllWindows()

效果非常给力,大家可以去尝试,不要忘记import cv2,想更多了解的朋友推荐大家看一下我推荐的最后一个博客,非常多的方法都可以去尝试。

代码转载自:https://blog.csdn.net/sunny2038/article/details/9202641

相关资料可查阅:

c++版本图像边缘检测:http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/imgtrans/canny_detector/canny_detector.html(c++的,代码流程可以用作参考)

python图片像素的获取:https://blog.csdn.net/mao_hui_fei/article/details/78217049

图像边缘识别: https://blog.csdn.net/qq_40962368/article/details/81416954(这个里面的canny算子我没有调试出来,不过别的方法也非常给力,大家可以看一下)

 

图像边缘识别检测

原文:https://www.cnblogs.com/CHAHA123/p/10658622.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!