C++ 打印时像素值是否奇怪?

C++ 打印时像素值是否奇怪?,c++,opencv,C++,Opencv,我知道这个问题已经得到了回答,但当我尝试解决方案时,它并没有把我带到任何地方 下面是我编写的用于获取图像最左侧和最右侧边界的给定代码,该边界是使用canny边缘检测器OpenCV进行阈值化的 #include<iostream> #include<vector> #include<math.h> #include<string> #include "opencv2/highgui/highgui.hpp" #include "opencv2/img

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

下面是我编写的用于获取图像最左侧和最右侧边界的给定代码,该边界是使用canny边缘检测器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;
}
#包括
#包括
#包括
#包括
#包括“opencv2/highgui/highgui.hpp”
#包括“opencv2/imgproc/imgproc.hpp”
使用名称空间cv;
使用名称空间std;
int main(int argc,字符**argv)
{
int thresh=100,rows=0,cols=0;;
Mat src、src_gray、canny_输出;
src=imread(argv[1]);
CVT颜色(src、src_灰色、CV_BGR2灰色);
模糊(src_灰,src_灰,大小(3,3));
Canny(src_gray,Canny_输出,thresh,thresh*3,3);
Mat boundary_image=Mat::zeros(canny_output.size(),CV_8UC1);
行=canny_output.rows;
cols=canny_output.cols;

cout要正确地
cout
a
unsigned char/uchar
,您应该首先强制转换它,例如

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

cout您到底想实现什么(即,期望的输出是什么)?列上的两个内部循环不是很清楚(至少对我来说是这样)。@sansuiso问题是我无法查看canny边缘检测图像的像素值。行"coutthanks很多。这是否意味着,在比较时,if循环中应该进行相同的更改?@LakshmiNarayanan不,您不需要。在这种情况下,它将键入promote to
int
。是的,但这会为新图像设置值吗?boundary\u图像?因为我尝试过,但图像在显示时似乎总是空的。有没有cu请问那里有什么?
cout << (int)canny_output.at<uchar>(i,j) << endl;