2013-01-15 62 views
2

好吧,我一直在嘗試和在線搜索,但我找不到這個。OpenCV imwrite,顏色錯誤:我使用convertTo/cvColor的哪個參數?

我:

  1. OpenCV4Android我使用以混合方式,其中:Java和本機。與

    capture.retrieve(mFrame, Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA);

獲得

  • 墊子不能改爲本地,因爲它是別人的庫,它完全是建立在非母語的方式。

    1. 本地方法,而我使用mFrame.nativeObj,並使用通過這個太:

      JNIEXPORT int JNICALL Java_com_... (...jlong addr ...) 
      { 
      
          Mat& mrgba = *((Mat*)addr); 
      
          // do stuff 
      
          imwrite(mrgba, ...); 
      } 
      

    現在......我用這個矩陣,然後我把它寫有imwrite,都在這個本地部分。雖然imwrite寫入文件,但它的顏色都是錯誤的。紅色,他們應該是白色,綠色,他們應該是黑色和紫色,他們應該是我的桌子的顏色,即淡黃色。現在,我不想盲目試圖cvColorconvertTo,我寧願知道的東西。

    那是什麼我應該知道的是首先用

    capture.retrieve(mFrame, Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA); 
    

    檢索和然後通過JNI天然的OpenCV幀頻道,類型,信道階數和諸如此類的東西的多少?實際上,我需要對原生進行哪些轉換以表現行爲?

  • 回答

    1

    出於某種原因,與

    capture.retrieve(mFrame, Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA); 
    
    獲得的圖像

    需要像這樣轉換:

    cvtColor(mrgba, mbgr, CV_YCrCb2RGB, 4); 
    

    以便imwrite正確地將圖像輸出到SD卡。

    我不明白爲什麼(imwrite應該接受BGR圖像),但至少這回答了我的問題。

    0

    嘗試

    capture.retrieve(mFrame, Highgui.CV_CAP_ANDROID_COLOR_FRAME_BGRA); 
    

    堂妹的OpenCV讀取與藍色,綠色和紅色信道而不是紅色,綠色,藍色的圖像..

    +0

    我不想這樣做。但是,如果我這樣做,那麼寫入的圖像全部都是綠色陰影,不會發現紅色或藍色。 (當然更不用說活動中的顯示也是錯誤的顏色。) – Diana

    +0

    它難以猜測幀的通道順序......但是根據文檔,OpenCV總是以BGR順序讀取圖像......所以你可以玩cvtColor(),一旦你得到所需的結果,你可以嘗試解釋它以更好地理解... –

    +0

    我已經嘗試了各種轉換,但都沒有成功,因此問題在這裏。除非沒有其他選擇,否則我不打算盲目嘗試cvtColor的所有組合。 – Diana