【发布时间】:2015-04-16 21:49:49
【问题描述】:
我知道这个问题已经得到解答,但是当我尝试解决方案时,它并没有带我去任何地方。
下面是我编写的用于获取图像最左边和最右边边界的给定代码,该代码使用精明边缘检测器 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;
}
算法是否有效是次要的,但无法查看canny边缘检测图像的值。它显示一些符号或空值。你能告诉我哪里出错了吗?
注意:问题在于打印语句
cout<<canny_output.at<uchar>(i,j)<<endl;
这在输出端没有给我任何合理的值来查看像素值。发布的类似问题和答案是使用 uchar 作为数据类型,但在我的情况下,它不起作用。这听起来可能很简陋,但非常感谢您的帮助。
【问题讨论】:
-
您到底想达到什么目的(即,期望的输出是什么)?列上的 2 个内部循环不是很清楚(至少对我而言)。
-
@sansuiso 问题是无法查看精巧边缘检测图像的像素值。 “cout(i,j)