繁体   English   中英

OpenCV二进制图像仅获得白色像素不起作用

[英]OpenCV binary image get only white pixels don't work

我正在做一些图像处理学习,我正在将openCV与新的C ++ iterface一起使用。

我有一个RGB图像,我读取了灰度版本,均衡了直方图,然后使用canny来检测边缘。

问题是:Canny函数返回的是灰度图像还是二进制图像? 我使用double for循环来检查由于应用Canny边缘检测器而导致的图像像素值,并且我有很多完全不同的值。 在二进制图像中,必须只有两个值0或1(0或255)...我该怎么做?

我的代码:

imagen = imread(nombre_imagen,0); //lee la imagen en escala de grises
equalizeHist(imagen,imagen);
Canny(binary,binary,0.66*threshold,1.33*threshold,3,true);
for(int i=0;i<binary.rows;i++){
    for(int j=0;j<binary.cols;j++){
       std::cout << binary.at<float>(i,j)<< ",";
    }
    std::cout << "\n";
}

这是一个183x183矩阵,我什至可以看到很多数值,甚至是nan 如何制作此二进制文件?

对于Canny函数,我使用一个阈值来获取灰度图像的“平均值”值; 我在这里看到了它: http : //www.kerrywong.com/2009/05/07/canny-edge-detection-auto-thresholding/

二进制图像的类型为uchar ,如果需要0-255的范围,则需要将其uchar转换为int (或unsigned int ):

for(int i=0;i<edges.rows;i++) {
    for(int j=0;j<edges.cols;j++) {
       std::cout << (int)edges.at<uchar>(i,j)<< ",";
    }
    std::cout << "\n";
}

您应该避免使用C样式的强制转换,但我将其留给读者练习。

说明文件( http://opencv.willowgarage.com/documentation/cpp/imgproc_feature_detection.html?highlight=canny#Canny )表示:

无效Canny(const Mat&image,Mat&edge,double threshold1,double threshold2,int apertureSize = 3,bool L2gradient = false)

第二个参数-edge –输出边缘图。 它将具有与图像相同的尺寸和类型

在您的通话中,您传递了与第二个参数相同的源图像,这会导致奇怪的结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM