www.fltk.net > 使用opEnCv,用CAnny做图像边缘识别,得到边缘后怎...

使用opEnCv,用CAnny做图像边缘识别,得到边缘后怎...

用opencv自带的canny检测后(详见一楼的回答)应该已经得到包含边缘 的二值图像(设其图像头为 pEdge)可将其数据pEdge->ImageData 调出, 查找非0元素 即可得 (另外有一个cvCountNonZero的函数可以统计非零元素个数)

img=cvLoadImage(argv[1]); IplImage* gray=cvcreateImage(cvgetsize(img),8,1); IplImage* edge=cvcreateImage(cvgetsize(img),8,1); cvCvtColor(img,gray,CV_BGR2Gray); cvCanny(gray,edge,60,255,3); 得到的Edge就是图像的边缘,在函数cvCann...

cvLoadImage读入图像灰度图像 IplImage* image=cvLoadImage(”图像名字“CV_LOAD_IMAGE_GRAYSCALE);// CvMemStorage* storage=cvCreateMemStorage(0); CvSeq* results=cvHoughCircles(image,storage,CV_HOUGH_GRADIENT,2,image- >width /10);//检...

canny算法是提取边缘的,这个阈值就是告诉算法“什么程度的边界才算边缘”,阈值越大表示标准越严厉,提取到的边缘越少,你可以跑跑程序,观察不同阈值对图像处理的结果,就知道了

你这个做alpha融合就可以了。

用opencv自带的canny检测后(详见一楼的回答)应该已经得到包含边缘 的二值图像(设其图像头为 pEdge)可将其数据pEdge->ImageData 调出, 查找非0元素 即可得 (另外有一个cvCountNonZero的函数可以统计非零元素个数)

IplImage* img=cvLoadImage("E:/研究生/opencv/图像与视频/rice.png");得到的是以一个三通道图像,你上面函数都写了如果不是单通道就会跳出返回null,当然没结果, 要改成这样 IplImage* img=cvLoadImage("E:/研究生/opencv/图像与视频/rice.png...

用中值滤波先除噪声

opencv不太熟,我的想法是: 先用canny算子进行边缘检测,得到这两条线; 然后求各点梯度,把水平方向梯度为零的点删除。剩下斜线; 然后找出两斜线顶点,两点横纵坐标差就是你要的! 或者,找一个角点检测的算法,可能快些!

edge detection是根据计算图像强度值的梯度来实现的。 这种技术显然不能实现你的要求。 你要实现的是区分主要目标和背景,需要采用salient (saliency) detection技术来实现。 具体实现方法,你自己在网上查查。 希望能帮到你!

网站地图

All rights reserved Powered by www.fltk.net

copyright ©right 2010-2021。
www.fltk.net内容来自网络,如有侵犯请联系客服。zhit325@qq.com