Ich erwarte, dass dies mehr mit Farbräumen und ihren Attributen zu tun hat. Ich habe versucht, ein YUYV in ein Graustufenbild zu konvertieren. Ich benutzte die folgenden Funktionsaufruf:Warum ändert opencv cvtColor die Bildgröße?
cv::cvtColor(imgOrig, imgGray, cv::COLOR_YUV2GRAY_420);
Mit dieser Funktion habe ich einen Teil der Höhe des Bildes verloren. Ich könnte natürlich die Resize-Methode verwenden, um das ursprüngliche Bild groß genug zu machen, so dass die Konvertierung keine tatsächlichen Daten aussortieren würde, sondern den passenderen Weg herausfinden wollte.
am opencv Quelle sucht, ist unten ein Auszug aus dem cvtColor Methode:
case COLOR_YUV2GRAY_420:
{
if (dcn <= 0) dcn = 1;
CV_Assert(dcn == 1);
CV_Assert(sz.width % 2 == 0 && sz.height % 3 == 0 && depth == CV_8U);
Size dstSz(sz.width, sz.height * 2/3);
_dst.create(dstSz, CV_MAKETYPE(depth, dcn));
dst = _dst.getMat();
#ifdef HAVE_IPP
#if IPP_VERSION_X100 >= 201700
if (CV_INSTRUMENT_FUN_IPP(ippiCopy_8u_C1R_L, src.data, (IppSizeL)src.step, dst.data, (IppSizeL)dst.step,
ippiSizeL(dstSz.width, dstSz.height)) >= 0)
break;
#endif
#endif
src(Range(0, dstSz.height), Range::all()).copyTo(dst);
}
break;
Sie sehen, dass auf der 8. Zeile wird die Größe des Zielbildes aus zwei Drittel der Größe zu sein das Quellbild.
Warum ist das so? Was ist der geeignete Weg für eine Farbraumkonvertierung?
[This] (http://answers.opencv.org/question/100149/how-to-get-y-u-v-from-image/) kann eine Erklärung liefern. –