gpt4 book ai didi

c++ - 使用整数除法将 cv::Mat 除以一个数字

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:15:23 26 4
gpt4 key购买 nike

在 OpenCV 中,如果 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 Integer Division: 2

Normal Integer Division: 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;
}
}

最佳答案

首先:除法的重载运算符通过将矩阵的元素转换为 double 来进行操作。它最初使用乘法运算符为:Mat/a = Mat * (1/a)。其次:有一种非常简单的方法可以通过一个小的 for 循环来做到这一点:

   for(int i=0;i<temp.total();i++)
((unsigned char*)temp.data)[i]/=3;

关于c++ - 使用整数除法将 cv::Mat 除以一个数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39101475/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com