Python opencv imwrite中的色度子采样

Python opencv imwrite中的色度子采样,python,opencv,image-processing,jpeg,Python,Opencv,Image Processing,Jpeg,我正在使用OpenCV调整JPG的大小。代码就像 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,1x

我正在使用OpenCV调整JPG的大小。代码就像

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
有没有办法改变这一点


谢谢

我在安卓上工作,试图在安卓简历中重现你的用例。。。我所做的是如下

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桌面后,我检查了保存的文件

 atul@ubuntu:~/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
 atul@ubuntu:~/Development/sdk/platform-tools$ identify -verbose IMG_1.jpg | grep samp
        jpeg:sampling-factor: 2x2,1x1,1x1
 atul@ubuntu:~/Development/sdk/platform-tools$ identify -verbose IMG_2.jpg | grep samp
        jpeg:sampling-factor: 2x2,1x1,1x1
您的代码和我的代码唯一的不同之处是我使用了new Size()并创建了目标Mat对象,其大小为原来的一半。你能在你的代码中尝试以上两件事,看看它是否有效

仅仅通过观察你们得到的输出,我认为它不是色度,而是亮度在增加。。。在YCrCb颜色空间中,第一个元素是Lumina,第二个元素是Chroma Red,第三个元素是Chroma blue

OpenCV文档中有一篇很好的文章,可以用来处理Y Cr和Cb。以下是链接

我不认为Android CV、C++CV或Python CV会有任何区别,因为这三个版本都使用相同的底层原生CV代码


希望这能有所帮助……

谢谢Atul,我正在努力让它在改造后保持在1x1x1。您介意将您的图像发送给我吗。。。我无法获得1X1X1的图像。。。请将您的图像文件发送给我检查…当然,我应该将其发送到哪里?我真的不知道它在堆栈溢出中如何工作…您可以将其发送到我的主电子邮件id。。。请在主题行中标记堆栈溢出。。。