打印时像素值奇怪

Weird pixel values when printing out?

本文关键字:像素 打印      更新时间:2023-10-16

我知道这个问题已经得到了回答,但是当我尝试解决方案时,它并没有带我去任何地方。

下面是我编写的给定代码,用于获取图像的左侧和右侧边界,该边界使用精明的边缘检测器OpenCV进行阈值处理。

#include<iostream>
#include<vector>
#include<math.h>
#include<string>
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
using namespace cv;
using namespace std;
int main(int argc, char **argv)
{
        int thresh = 100,rows = 0,cols = 0;;
        Mat src,src_gray,canny_output;
        src = imread( argv[1]);
        cvtColor( src, src_gray, CV_BGR2GRAY );
        blur( src_gray, src_gray, Size(3,3) );
        Canny( src_gray, canny_output, thresh, thresh*3, 3 );
        Mat boundary_image = Mat::zeros( canny_output.size(), CV_8UC1 );
        rows = canny_output.rows;
        cols = canny_output.cols;
        cout<<rows<<endl<<cols<<endl;
        for(int i=0;i<rows;i++)
        {
                for(int j=0;j<cols;j++)
                {
                        cout<<canny_output.at<uchar>(i,j)<<endl;
                        if(canny_output.at<uchar>(i,j) == 255)
                        {
                                boundary_image.at<uchar>(i,j) = 255;
                                break;
                        }
                }
                for(int k = cols;k>0;k--)
                {
                        if(canny_output.at<uchar>(i,k) == 255)
                        {
                                 boundary_image.at<uchar>(i,k) = 255;
                                 break;
                        }
                }
        }
        imshow("boundary_image",boundary_image);
        waitKey(0);
        return 0;
}

算法是否有效是次要的,但我无法查看精明边缘检测到的图像的值。它显示一些符号或空值。你能告诉我哪里出错了吗?

注意:问题与打印语句有关

cout<<canny_output.at<uchar>(i,j)<<endl;

这在输出中没有给我任何合理的值来查看像素值。类似的问题发布,答案是使用 uchar 作为数据类型,但就我而言,它不起作用。这听起来可能很简陋,但非常感谢您的帮助。

要正确cout unsigned char / uchar,您应该先投射它,例如

cout << (int)canny_output.at<uchar>(i,j) << endl;

要继续阅读,请查看为什么"cout""unsigned char"很奇怪?