[英]Getting maximum pixel value in grayscale image in opencv
在進行一些圖像處理並應用遮罩后,我得到了想要的東西。 我可以在“裁剪”的imshow結果上清楚地看到圖像中間有灰色像素。 我正在嘗試獲取最大像素值位置。 我檢查了crop.channels(),它返回1。
Mat mask = drawing2;
drawContours(mask, contours, -1, Scalar(255), CV_FILLED);
Mat dist;
distanceTransform( cannyInv, dist, CV_DIST_L2, 3 );
normalize(dist,dist,0.0,1.0,NORM_MINMAX);
Mat crop;
dist.copyTo(crop, mask);
cout << "max.. "<< *std::max_element(crop.begin<double>(),crop.end<double>()) <<endl;
最多返回4.25593e-08
for(int y = 0; y < crop.rows; y++)
{
for(int x = 0; x < crop.cols; x++)
{
if (crop.at<unsigned char>(x,y) > 0){
cout << "X........"<<x<<" Y......"<<y<< " = "<<crop.at<unsigned char>(x,y) <<endl;
}
}
}
輸出為:
X........604 Y......479 = ¿
X........607 Y......479 =
X........610 Y......479 = ¿
請幫幫我
PD:我知道也有類似的問題。 但這是特定的問題。
我不確定如何解決。 很多時間過去了。 但是我目前擁有的並且可以正常工作的代碼是這樣的:
Mat dist=Mat::zeros(480,640, CV_8UC1);;
distanceTransform( cannyInv, dist, CV_DIST_L2, 3 );
Mat distNorm;
dist.convertTo(distNorm, CV_8UC1,1,0);
Mat result= Mat::zeros(480,640, CV_8UC1);
distNorm.copyTo(result, mask);
Mat tmp=Mat::zeros(480,640, CV_8UC1);
Mat fik=Mat::zeros(480,640, CV_8UC3);
for(int i = 0; i < result.rows; i++)
{
for(int j = 0; j < result.cols; j++)
{
if ( result.at< uchar >( i,j ) > 0){
uchar val = result.at< uchar >( i,j );
if(val>maxVal){
if(val>0){
cv::circle(tmp,cvPoint(j,i),2,255,-1);
}
maxVal=val;
maxX = j;
maxY = i;
}
}
}
}
您確定歸一化Mat會自動將其從uchar轉換為double嗎? 數據很可能仍以uchar形式存儲,並且您正在從中讀取錯誤的數字。
嘗試dist.convertTo(dist,CV_64F); 將數字打印成雙倍
或僅與uchars一起使用。
試試這個代碼:
cout << "X........"
<< x
<< " Y......"
<< y
<< " = "
<< (double) crop.at< unsigned char>(x,y) <<endl;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.