簡體   English   中英

划分 OpenCV Mat 給出了意想不到的結果

[英]Dividing OpenCV Mat gives unexpected result

我正在嘗試在圖像和內核之間進行一些卷積,所以我的結果並不是很大,我一直在嘗試預先將內核標准化為 0 到 1 之間的范圍。 我正在使用 CV_32FC1 墊類型,我的圖像是灰度的。

我的內核從 -1 到 1 的范圍開始。我減去最低值,給出 0 到 2 的范圍,然后除以最大值,理論上應該是 0 到 1 的范圍。但是,在此之后除法后,值的范圍變為 0 到 358。(我將這些數字四舍五入 - 如果實際的精確值有幫助,請告訴我。)

這是我的代碼:

double minVal; double maxVal;
minMaxLoc(kernel, &minVal, &maxVal);
kernel = kernel - minVal;             
minMaxLoc(kernel, &minVal, &maxVal);
divide(maxVal, kernel, kernel);

那么,為什么會發生這種情況? 我覺得我可能以某種方式遇到了內存或溢出問題,但我認為我的所有值都在 32F 可以存儲的范圍內。 修復會很棒,但為什么是我最感興趣的。

來自opencv 文檔 divide運算符與您的想法不同:對於它計算的每個元素:

dst(I) = saturate(scale/src2(I))

雖然您期望:

dst(I) = saturate(src2(I)/scale)

我認為你應該這樣做:

kernel = kernel / maxVal;

(不確定這會起作用;但只要確保你有一個真正的元素划分)。

暫無
暫無

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

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