[英]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.