簡體   English   中英

OpenCV輸出奇數像素值

[英]OpenCV outputing odd pixel values

我想使用C ++對圖像進行處理,並且一直在使用OpenCV。 但是,在嘗試分別訪問每個像素時,我有些卡住了。 我可以使用以下命令輸出整個灰度圖像:

cout << image;

並獲得預期值的輸出,如下所示:

[143, 147, 164, 177, 177, 185, 196, 195, 185, 186, 178, 190, 178, 163, 183...

但是當我嘗試使用一次輸出一個像素時:

for (int y = 0; y < image.rows; ++y) {
    for (int x = 0;x < image.cols; ++x) {
        std::cout<<image.at<double>(y, x)<<" ";
    }
            cout << endl;}

我的輸出是很多這樣的數字:

-2.98684e+18 -1.21685e-83 -1.91543e-113 -1.8525e-59 -2.73052e-127 -2.08731e-35 -3.72066e-103 ...

對我缺少或做錯的事情有什么想法嗎?

由於您的值[143、147、164、177 ...]看起來像uchar類型,因此Mat類型應該為CV_8U = 0或CV_8UC3 = 16,您可以使用image.type()進行檢查。 因此,您的輸出應為(如@Micka所述)

std::cout<<image.at<uchar>(y, x)<<" "; // gray
or
std::cout<<image.at<Vec3b>(y, x)<<" "; // color

將來只需使用此命令即可避免擔心類型:

Rect rect(0, 0, 10, 10); // print 10x10 block
cout<<image(rect)<<endl;

並不是說知道類型並不重要。

如果要打印圖像的所有像素,只需使用:

cout << image << endl;

如果要打印像素,請使用:

cout << image.at<Vec3b>(y, x) << endl; // for color image

要么

cout << (int) image.at<uchar>(y, x) << endl; // for gray-scale image

請注意,在最后一行中,需要將其強制轉換為int 有關詳細信息,請查看為什么“ cout”對於“ unsigned char”很奇怪?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM