【Opencv】边缘检测

2018-7-5 凌晨
代码万万要认真,今晚抄书都能抄错,是在该打。
书上的一行

graySrc = cv2.cvtColor(blurredSrc, cv2.COLOR_BGR2GRAY)

硬生生被我抄成了

graySrc = cv2.cvtColor(blurredSrc, cv2.COLOR_BAYER_BGR2GRAY)

然后报错:
cv2.error: OpenCV(3.4.1) /io/opencv/modules/imgproc/src/demosaicing.cpp:1632: error: (-215) scn == 1 && dcn == 1 in function demosaicing
百思不得其解啊,还问了京哥。
刚才一看,居然是抄错了,遂改代码。
这不,又报错了:
cv2.error: OpenCV(3.4.1) /io/opencv/modules/highgui/src/window.cpp:356: error: (-215) size.width>0 && size.height>0 in function imshow
网上查该错误,说是图片路径,但是我这是视频流的帧,应该不是同样的问题吧。
Emmm
行吧,发现是自己写成了

            if flag:
                frame_new = filters.strokeEdges(frame, frame)
                cv2.imshow("frame", frame_new)

把帧当成图片显示,这能对就怪了。
遂改成如下:

            if flag:
                filters.strokeEdges(frame, frame)

可以正常显示
这个filter的逻辑如下:
1.边缘检测将非边缘区域转为黑色,边缘变为白色——边缘检测滤波函数
2.图片中存在噪声,会被错认为是边缘,可以对图像进行模糊处理——模糊滤波函数
本模块使用medianBlur作为模糊函数,Laplacian作为边缘检测函数
流程如下:
图像——medianBlur——BGR2GRAY灰度——Laplacian——转换为黑色边缘,白色背景
转换为黑色边缘,白色背景:需要归一化,然后乘以图像

猜你喜欢

转载自blog.csdn.net/alvin93/article/details/80920842