簡體   English   中英

單通道 OpenCV Mat.at<> 給出錯誤的值

[英]Single Channel OpenCV Mat.at<> gives out wrong values

聲明 Mat 圖像並賦值。

Mat magnitude = Mat(gradient_columns.cols, gradient_columns.rows, CV_64FC1);
for(int i = 0; i < gradient_columns.cols; i++)
{
    for(int j = 0; j < gradient_columns.rows; j++)
    {
        magnitude.at<double>(Point(i,j)) = (double)hypot(gradient_columns.at<double>(Point(i,j)), gradient_rows.at<double>(Point(i,j)));
    }
}

打印上述墊子:

cout << "M = " << magnitude << endl;

結果:

M = [0, 0, 0.1257399049164523, 12.36316814720732, 12.50461780753356, 0.2674320707434279, 10.39230484541326, 12.03299037437945, 5.430256687374658, 
12.03299037437945, 4.684492386402418, 4.72934192083521, 12.16431633381293, 5.397674732957373, 12.30042244512288, 10.25834261322606, 0.3944487245360109, 
12.16431633381293, 11.84297951775486, 12.44187210544911, 12.10132213098092, 
0.4088817310696626, 10.15078660267586, 12.09573607646389, 2.076275433221507, 0, 0.1257399049164523, 0, 0.1257399049164523, 0;
.....
.....]

上述結果完全正確,符合預期。

但是,如果我嘗試打印單個值,則會得到錯誤的結果:

cout.precision(20);
cout << "CHANNELS: " << magnitude.channels() << endl;
cout << magnitude.at<double>(Point(0, 2)) << endl; 
cout << magnitude.at<double>(Point(0, 3)) << endl; 
cout << magnitude.at<double>(Point(0, 4)) << endl; 
cout << magnitude.at<double>(Point(0, 5)) << endl; 

Result | Actual Value:
CHANNELS: 1
0.062870  |  0.1257399049164523,
0.000000  |  12.36316814720732,
0.031404  |  12.50461780753356,
0.000000  |  0.2674320707434279

我了解它的一些數據類型轉換問題,但是如果有人可以提出任何解決方案?

謝謝。

我相信您的矩陣沒有錯。 您只是不打印自己的想法。

當寫magnitude.at<double>(Point(0,2))你沒有打印數量在行0和2列如你預期,但在第2行和列0嘗試寫多少magnitude.at<double>(0,2)代替。

對於那些遇到類似問題並且@Sunreef 的答案不起作用的人,請檢查您是否不小心使用了mat.at<float>(_,_)而不是mat.at<double>(_,_)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM