Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.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 CVT彩色图像截断_C++_Opencv_Image Processing_Mat_Image Conversion - Fatal编程技术网

C++ OpenCV CVT彩色图像截断

C++ OpenCV CVT彩色图像截断,c++,opencv,image-processing,mat,image-conversion,C++,Opencv,Image Processing,Mat,Image Conversion,我正在使用cvtColor将图像从YUYV格式转换为RGB24格式。就颜色而言,输出很好,但图像的一半被剪切。图像是640x480 YUYV图像缓冲区,没有任何标题。我正在使用以下代码: FILE* fd = fopen("imgdump", "r+b"); char buffer[640*480*2]; // Each pixel takes two bytes in YUYV if (fd != NULL) { fread(buffer, sizeof(char), 6

我正在使用cvtColor将图像从YUYV格式转换为RGB24格式。就颜色而言,输出很好,但图像的一半被剪切。图像是640x480 YUYV图像缓冲区,没有任何标题。我正在使用以下代码:

 FILE* fd = fopen("imgdump", "r+b");

 char buffer[640*480*2]; // Each pixel takes two bytes in YUYV

 if (fd != NULL)
 {
     fread(buffer, sizeof(char), 640*480*2, fd);
     fclose(fd);
 }

 Mat s_sImageMat = Mat(640, 480, CV_8UC2);  
 Mat s_sConvertedImageMat;

 cout << "before conversion\n";
 s_sImageMat.data = (uchar*) buffer;
 cvtColor(s_sImageMat, s_sConvertedImageMat, CV_YUV2RGB_YUYV);
 cout << "after conversion\n";

 FILE* fw = fopen("converted", "w+b");

 if (fw != NULL)
 {
     fwrite((char*)s_sConvertedImageMat.data, sizeof(char), 640*480*2, fw);
     fclose(fw);
 }
FILE*fd=fopen(“imgdump”、“r+b”);
字符缓冲区[640*480*2];//每个像素以YUYV为单位获取两个字节
如果(fd!=NULL)
{
fread(缓冲区,大小为(字符),640*480*2,fd);
fclose(fd);
}
Mat s_sImageMat=Mat(640480,CV_8UC2);
Mat s_sConvertedImageat;

cout问题似乎如下:

fwrite((char*)s_sConvertedImageMat.data, sizeof(char), 640*480*2, fw);
对于RGB24,它应该是:

fwrite((char*)s_sConvertedImageMat.data, sizeof(char), 640*480*3, fw);

每个像素在RGB24

s_simagmat.data=(uchar*)缓冲区中为3个字节--yikes,您在所有者不知情的情况下交换了缓冲区,并泄漏了旧的缓冲区?为什么不改用合适的方法呢?我知道这不会对转换产生影响,但这不是做导致内存泄漏的事情的借口。不要养成这样编写代码的习惯。不管怎样,您所展示的代码似乎缺少了一个重要的部分。请附上一份完整的文件,以及一份可以让我们重现这个问题的输入文件?图片文件和一份完整的MCVE。非常感谢。它成功了,解决了问题。