簡體   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