이미지를 YUYV 형식에서 RGB24로 변환하는 데 cvtColor를 사용하고 있습니다. 색상은 문제가 없지만 이미지의 절반은 잘립니다. 이미지는 어떤 헤더도없는 640x480 YUYV 이미지 버퍼입니다.OpenCV cvtColor image truncated
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);
}
원본 파일 : 나는 다음과 같은 코드를 사용하고 https://drive.google.com/file/d/0B0YG1rjiNkBUQ0ZuaWN6Y1E2LUU/view?usp=sharing
추가 정보 : 내가 OpenCV의 3.2
's_sImageMat.data = (UCHAR *) 버퍼입니다'- 싸, 당신은하지 않고 버퍼를 교환하고 주인의 지식과 오래된 것을 새어 나왔어? 대신 적절한 ['cv :: Mat' 생성자] (http://docs.opencv.org/3.1.0/d3/d63/classcv_1_1Mat.html#a51615ebf17a64c968df0bf49b4de6a3a)를 사용하지 않으시겠습니까? –
나는 그것이 변환에 영향을 미치지는 않을 것이라는 것을 알고 있지만, 이것은 메모리 누수의 원인이되는 것을하기위한 변명이 아니다. 이와 같은 코드를 작성하는 습관에 빠지지 마십시오. –
어쨌든, 보여주는 코드에서 중요한 부분이 누락 된 것 같습니다. 이 문제를 재현 할 수있는 의견과 함께 전체 [MCVE] (https://stackoverflow.com/help/mcve)를 첨부 할 수 있습니까? –