2014-02-11 74 views
3

我使用OpenCV來調整JPG大小。代碼就像opencv中的色度子採樣imwrite

im = cv2.imread(infile) 
resized_im = cv2.resize(im, None, None, 0.5, 0.5, cv2.INTER_LINEAR) 
cv2.imwrite(outfile, resized_im) 

在查看調整大小的圖像時,我可以看到色度已被下采樣。

$ identify -verbose input.jpg | grep samp 
    jpeg:sampling-factor: 1x1,1x1,1x1 
$ identify -verbose resized.jpg | grep samp 
    jpeg:sampling-factor: 2x2,1x1,1x1 

有沒有什麼辦法可以改變它?

謝謝!

回答

1

我曾在Android和試圖重現您使用的情況下,Android的簡歷......我所做的是以下...

Mat tempMat=new Mat(); 
Utils.bitmapToMat(bm, tempMat); 
Mat tempMat1 = new Mat(tempMat.rows()/2, tempMat.cols()/2, tempMat.type()); 
Imgproc.resize(tempMat, tempMat1, new Size(), 0.5, 0.5, Imgproc.INTER_LINEAR); 
Utils.matToBitmap(tempMat, bm); 
bm = Bitmap.createBitmap(tempMat1.width(), tempMat1.height(), Bitmap.Config.ARGB_8888); 
Utils.matToBitmap(tempMat1, bm); 

然後,我有一些代碼,以兩個位圖保存到文件..我檢查了已保存的文件從我的Android設備Ubuntu桌面下載它們之後...

[email protected]:~/Development/sdk/platform-tools$ ls -l IMG_?.jpg 

    -rw-r--r-- 1 atul atul 209336 Feb 13 09:58 IMG_1.jpg 
    -rw-r--r-- 1 atul atul 63237 Feb 13 09:58 IMG_2.jpg 
[email protected]:~/Development/sdk/platform-tools$ identify -verbose IMG_1.jpg | grep samp 
     jpeg:sampling-factor: 2x2,1x1,1x1 
[email protected]:~/Development/sdk/platform-tools$ identify -verbose IMG_2.jpg | grep samp 
     jpeg:sampling-factor: 2x2,1x1,1x1 

唯一的區別在你的代碼,我的是我用新的大小(),並用半創建的目標墊目標尺寸。你可以嘗試在代碼中的上述兩件事,看看它是否工作...

只是看着輸出你越來越我認爲它不是色度,但Lumina越來越...在YCrCb色彩空間,第一個元素是Lumina,第二個是色度紅,第三個是色度藍色......

OpenCV文檔中有很好的文章來演示Y Cr和Cb。以下是鏈接...

http://docs.opencv.org/doc/tutorials/core/interoperability_with_OpenCV_1/interoperability_with_OpenCV_1.html

我不認爲Android CV或C++ CV或Python CV應該有任何區別,因爲所有的三個使用s相同的底層本地CV代碼...

希望這會有所幫助...

+0

感謝Atul,我試圖讓它保持在1x1x1被轉換後。 – OneSolitaryNoob

+0

您是否介意給我發送您的圖片...我無法獲得1X1X1的圖片...請將您的圖片文件發送給我檢查... –

+0

當然,我應該在哪裏發送它? – OneSolitaryNoob