我想将一个matlab项目转移到C++代码。但是,当我试图按帧读取mp4视频时,每个像素的RGB值与Matlab非常不同。这是否意味着OpenCV使用了不同的RGB值表示?如果是这样,我该如何将OpenCV值更改为Matlab?否则,我无法通过检查值来验证我的实现是否正确。OpenCV在Matlab中有不同的RGB值?
例如: 我想检查OpenCV和Matlab中的点(0,0)值。 OpenCV给出了以下结果:blue=106 green=105 red=102
但是,在Matlab中,结果是:blue=85 green=86 red=83
我试图在Matlab中为每个200帧(point(1,1))获取点(0,0)中的RGB值。
的C++代码在OpenCV中获得RGB值分别是:
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))]);
我应该如何解决这个问题?
请提供代码和示例数据,以便重现您的问题。 – Daniel 2014-08-31 19:09:03
是的,我已经更新。 – user2970089 2014-08-31 19:21:35
提供的代码不会重现任何问题。首先,没有Matlab代码。其次,OpenCV代码太笼统。如果声称一帧中的RGB值对于(0,0)是错误的,则显示检查/显示该值的代码。最后,这可能有助于解决导致问题的数据。 – horchler 2014-08-31 19:30:08