从 OpenCV 的 VideoCapture 获取的图像与标量之间的整数除法

Integer division between an Image taken from a VideoCapture of OpenCV and a scalar

我使用的是 OpenCV 3.2 版本。

我打开默认摄像头:

VideoCapture cap;
cap.open(0);

并抓取当前帧:

Mat frame;
cap.read(frame);

现在我想减少图像中显示的颜色数量。因此,我做了一个 整数除法 并将图像乘以相同的标量值,例如设为 10。这可以通过 C++ 运算符的重载轻松完成。

Mat processedFrame = (frame / 10) * 10

但是,frame 值是浮点数格式。然后除法不是作为整数除法执行的,并且没有实现颜色的减少。

我想这可以通过在进行整数除法之前将 frame 转换为整数值来解决。考虑到相机可以在 1 个(灰度)或 3 个(BGR)颜色通道中抓取图像,我该如何进行此演员表?

OpenCV 还提供 API 乘法和除法。您可以使用 API 来获得所需的结果,而不是像这样使用重载运算符:

// Assuming the image to be RGB 
cv::divide(frame, cv::Scalar(10, 10, 10), frame, 1, CV_8UC3);
cv::multiply(frame, cv::Scalar(10, 10, 10), frame, 1, CV_8UC3);