OpenCV显示像素值

时间:2015-04-25 13:11:13

标签: c++ opencv pixel

我有以下代码。当我运行程序时,屏幕上会出现未知字符而不是像素值。我想显示像素值。我该怎么做呢?谢谢。

#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main()
{
    Mat image = imread("/home/fd/baby.jpg");
    for( int i = 0 ; i < image.rows ; i++)
    {
        for( int j = 0 ; j < image.cols ; j++ )
        {
            if(image.type() == CV_8UC1)
            {
                image.at<uchar>(i,j) = 255;
            }
            else if(image.type() == CV_8UC3)
            {
                cout << image.at<Vec3b>(i,j)[0] << " " << image.at<Vec3b>(i,j)[1] << " " << image.at<Vec3b>(i,j)[2] << endl;

                image.at<Vec3b>(i,j)[0] = 255;
                image.at<Vec3b>(i,j)[1] = 255;
                image.at<Vec3b>(i,j)[2] = 255;

                cout << image.at<Vec3b>(i,j)[0] << " " << image.at<Vec3b>(i,j)[1] << " " << image.at<Vec3b>(i,j)[2] << endl;
            }
            else
            {
                cout << "Anknown image format" << endl;
                return 0;
            }
        }
    }
    imshow("Result İmage", image);
    waitKey(0);
}

这是结果屏幕:

enter image description here

4 个答案:

答案 0 :(得分:3)

将每个输出转换为整数

<< image.at<Vec3b>(i,j)[0] ...

更改为

<< (int)image.at<Vec3b>(i,j)[0] ...

您正在打印一个char(或可能是unsigned char),它通过流打印为单个字符(255看起来就像您所看到的那样)。转换为int强制它显示值的数字表示。

另一个答案是更改image.at<type>更改原始数据的解释方式;不要那样做。必须正确解释它们。

答案 1 :(得分:0)

更改

image.at<Vec3b>(i, j)

image.at<int>(i, j)

image.at<double>(i, j)

image.at<float>(i, j)

打印值而不是字符

答案 2 :(得分:0)

Vec3b px = image.at(x,y);

cout <<“值:(” <<(int)px.val [0] <<“,” <<(int)px.val [1] <<“,” <<(int)px。 val [2] <<“)” << endl;

这对我有效。

答案 3 :(得分:-2)

您正在显示使用函数image.at<int>(j,i);

进行转换的字符