Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenCV视频捕获图像与标量图像之间的整数除法_C++_Opencv_Video Capture_Mat_Integer Division - Fatal编程技术网

C++ OpenCV视频捕获图像与标量图像之间的整数除法

C++ OpenCV视频捕获图像与标量图像之间的整数除法,c++,opencv,video-capture,mat,integer-division,C++,Opencv,Video Capture,Mat,Integer Division,我使用的是OpenCV 3.2版 我打开默认相机: VideoCapture cap; cap.open(0); 并抓取当前帧: Mat frame; cap.read(frame); 现在我想减少图像中显示的颜色数量。因此,我做一个整数除法并将图像乘以相同的标量值,例如,设为10。这可以很容易地用C++操作符的超载来完成。 Mat processedFrame = (frame / 10) * 10 但是,frame值采用浮点格式。然后该除法不作为整数除法执行,并且不能实现颜色的减少 我

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

@是的,我试过
Mat processedFrame=(static_cast(frame)/10)*10。这会返回一个完整的黑色图像(
frame
值为>>10)。它似乎有效,但我已经意识到,这种解决方案会对分割进行取整,而不是生成一个底部(整数分割)。值为16(假设灰度)并减少10的像素将被转换为值为20(而不是10)的像素。好的,此问题可以按中的方式解决