我在尝试将一个MATLAB项目转换为C++代码。然而,当我尝试按帧读取MP4视频时,每个像素的RGB值与MATLAB非常不同。这是否意味着OpenCV使用了不同的RGB值表示法?如果是这样,我该如何将OpenCV值更改为MATLAB?否则,我无法通过检查值来验证我的实现是否正确。
例如: 我正在尝试检查OpenCV和MATLAB中点(0,0)处的值。OpenCV给出以下结果:
获取OpenCV中RGB值的C++代码如下:
我该如何解决这个问题?
例如: 我正在尝试检查OpenCV和MATLAB中点(0,0)处的值。OpenCV给出以下结果:
蓝色=106 绿色=105 红色=102
。然而,在MATLAB中,结果是:蓝色=85 绿色=86 红色=83
。我尝试获取200帧中点(1,1)(在MATLAB中为点(0,0))的RGB值。获取OpenCV中RGB值的C++代码如下:
Mat img;
number = 0;
VideoCapture cap(filename_input_video);
if(!cap.isOpened()) {
printf("No video to Read!\n");
return -1;
}
for( ; ; ) {
cap >> img;
if(img.empty())
break;
number++;
for(int i=0; i<img.rows; i++) {
for(int j=0; j<img.cols; j++) {
int blue = img.at<Vec3b>(i, j)[0];
int green = img.at<Vec3b>(i, j)[1];
int red = img.at<Vec3b>(i, j)[2];
if(number == 200 && i==0 && j==0) {
printf("blue=%d green=%d red=%d", blue, green, red);
}
}
}
if(number == 200) {
number = 0;
}
}
Matlab代码如下:
OBJ = VideoReader(filename_source);
fBlock = 200;
nFrame = get(OBJ, 'NumberOfFrames');
nBlock = ceil(nFrame / fBlock);
for iBlock = 1:nBlock
display(['Processing video 1 block #' num2str(iBlock) '...']);
start_index = (iBlock-1)*fBlock+1;
end_index = min(iBlock*fBlock, nFrame);
vSource = read(OBJ,[start_index end_index]);
display(['red ' num2str(vSource(1,1,1,200))]);
display(['green ' num2str(vSource(1,1,2,200))]);
display(['blue ' num2str(vSource(1,1,3,200))]);
我该如何解决这个问题?