2017-09-22 7 views
0

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?

+0

[This] (http://answers.opencv.org/question/100149/how-to-get-y-u-v-from-image/) kann eine Erklärung liefern. –

Antwort

1

Offensichtlich funktioniert YUV420. Von wikipedia verwendet YUV 6 Bytes, um 4 Pixel zu speichern. Diese 4 Pixel teilen sich U, V Werte mit ihren eigenen Y-Werten. Das Bild und die Formel in der conversion from YUV420 to RGB888 section erklärt es besser. Sie erklären auch sehr gut, warum der Scheck

und warum die RGB nur 2/3 der YUV ist.

+0

Aber wenn wir zu Graustufen gehen, würde Y (Luma) das einzige Ding sein, das notwendig ist? Oder muss eine Graustufenumwandlung zuerst durch RGB gehen? – engineer14

+0

Nun, dann ist es noch klarer, dass die Luma-Größe 2/3 des ursprünglichen YUV-Bildes ist, oder? –

+0

Vielleicht habe ich ein Missverständnis, aber jedes Pixel hat seinen eigenen Y-Wert, daher sollte die Konvertierung in Graustufen genauso einfach sein wie das Ignorieren der u/v (Farbinformationen) und das Konvertieren der Ys in Ebenen. – engineer14

Verwandte Themen