我知道這個問題已經得到解答,但是當我嘗試解決方案時,它並沒有把我帶到任何地方。打印出來時奇怪的像素值?
下面給出的代碼是爲了得到圖像的左邊和右邊的邊界,用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;
}
該算法是否有效是次要的,但無法查看canny邊緣檢測圖像的值。它顯示了一些符號或空值。你能告訴我我要去哪裏嗎?
注:現在的問題是與打印語句
cout<<canny_output.at<uchar>(i,j)<<endl;
這是不給我任何合理值在輸出查看像素值。發佈的類似問題,答案是使用uchar作爲數據類型,但在我的情況下,它不起作用。這聽起來可能很簡單,但非常感謝您的幫助。
究竟是你想實現(即,什麼是理想的輸出)?柱子上的2個內圈不太清楚(至少對我來說)。 – sansuiso
@sansuiso問題是我無法查看Canny邊緣檢測圖像的像素值。 「cout << canny_output.at(i,j)<< endl;」這一行沒有給出任何合理的像素值。 –