[英]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樣式的強制轉換,但我將其留給讀者練習。
無效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.