在OpenCV的由數除以CV ::墊如果cv::Mat (CV_8U)
是由數除以(int
)結果將被舍入到最接近的數字,例如:使用整數除法
cv::Mat temp(1, 1, CV_8UC1, cv::Scalar(5));
temp /= 3;
std::cout <<"OpenCV Integer Division:" << temp;
std::cout << "\nNormal Integer Division:" << 5/3;
結果是:
OpenCV的整數除法:2
普通整數除法:1
很顯然,即使cv::Mat
的類型爲CV_8U
,OpenCV也不會使用整數除法。
我的問題是:
- 爲什麼?不應該將整數分解爲整數。爲什麼這個OpenCV的奇怪行爲?
- 我可以獲得整數除法而不是逐個像素地進行迭代並分割它嗎?
我當前的解決方案是:
for (size_t r = 0; r < temp.rows; r++){
auto row_ptr = temp.ptr<uchar>(r);
for (size_t c = 0; c < temp.cols; c++){
row_ptr[c] /= 3;
}
}
非常相似的問題http://stackoverflow.com/questions/30833540/is-there-a-way-to-prevent-rounding-in-opencv-matrix-divison – SpamBot