python - opencv imwrite中的色度子采样

标签 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)

在查看调整大小后的图像时,我可以看到色度已被下采样。<​​/p>

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

有什么办法可以改变吗?

谢谢!

最佳答案

我在 Android 上工作并尝试在 Android CV 中重现您的用例...我所做的是以下...

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() 并创建了一半大小的 Destination Mat 对象。你能在你的代码中尝试上面的两件事,看看它是否有效......

只是通过查看输出,我认为它不是 Chroma,而是 Lumina 正在增加......在 YCrCb 颜色空间中,第一个元素是 Lumina,第二个是 Chroma Red,第三个是 Chroma blue......

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 应该没有任何区别,因为这三者都使用相同的底层原生 CV 代码...

希望这有助于...

关于python - opencv imwrite中的色度子采样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21714637/

相关文章:

python - 将参数传递给解上下文装饰器

opencv - cv::Mat 是线程安全的(原子分配+引用计数)吗?

c# - 帮助位图解码器

opencv - 如何为 OpenCV 中的 InRange 阈值选择最佳 HSV 值

java - 如何去除图像中的颜色

python - 当预期 session 结束时进程死亡

python - Keras:model.fit 中的冗长(值 1)显示较少的训练数据

python - Django DST 时间更改问题与 django datetimefield

opencv - 用手点裁剪所需区域

c++ - 使用静态链接到 OpenCV (C++) 在 VS2013 中编译项目