从 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);
我使用的是 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);