相关疑难解决方法(0)

JPEG图像在多个设备上具有不同的像素值

我注意到,当在JPEG格式的设备上读取相同的照片时,像素值不匹配.它们很接近但不同.转换为PNG文件时,像素值似乎匹配.

这似乎是由于跨设备的(非)压缩算法.无论如何,这就是我想到的.有没有办法读取JPEG文件,以便跨设备从照片中检索相同的像素?我没有在BitmapFactory Options组件中看到一个选项.

当处理跨设备的图像的像素值时,当前应用以下内容来维持大小:

Options options = new Options();
options.inScaled = false;
options.inPreferQualityOverSpeed = true;
Run Code Online (Sandbox Code Playgroud)

目前比较像素与以下只是为了看几个(近似匹配,但不相等):

int[] pixels = new int[bitmapF.getWidth() * bitmapF.getHeight()];
bitmapF.getPixels(pixels, 0, bitmapF.getWidth(), 0, 0, bitmapF.getWidth(), bitmapF.getHeight());
Log.d("pixel entries", "pixels = " + pixels[233] + " - " + pixels[4002] + " - " + pixels[11391]);
Run Code Online (Sandbox Code Playgroud)

注意:如果读取未压缩的同一文件的PNG版本,则值与预期的相同.

例如,三星Galaxy S4和三星Galaxy S5甚至具有与assets文件夹中存储的相同jpeg(运行相同测试活动)不同的像素.

像素[233]例如在s5上是-5205635但在s4上是-5336451.像素[4002]也稍微偏离.但是像素[11391]在这个jpeg图片上的两个设备上是相等的.

android jpeg

19
推荐指数
1
解决办法
2077
查看次数

为什么相同的像素使用PIL和Opencv有不同的值?

我从互联网上下载了一张随机图像,使用它打开它PIL.Image.open()cv2.imread()然后检查了一些像素的值。问题是我使用 PIL 和 Opencv 得到了相同像素的不同值!
这是我尝试过的图像:
在此输入图像描述 这就是我所做的:

>>> import cv2
>>> from PIL import Image
>>> img = cv2.imread('img.jpg')
>>> im = Image.open('img.jpg')
>>> img[0][0]
>>> array([142, 152, 146], dtype=uint8)
>>> im.getpixel((0, 0))
>>> (138, 158, 131)
Run Code Online (Sandbox Code Playgroud)

两者的 R、G、B 值((138!= 146)、(158!= 152)、(131!= 142))im不匹配,尽管它们img是相同的像素和相同的图像!
我查看了SO帖子,发现这篇文章讨论了同样的问题,所以我使用发布的代码再次检查差异:

from PIL import Image
import cv2
import sys
from hashlib import md5
import numpy as np

def hashIm(im):
    imP = np.array(Image.open(im))

    # Convert to BGR …
Run Code Online (Sandbox Code Playgroud)

python opencv python-imaging-library

6
推荐指数
2
解决办法
3091
查看次数

标签 统计

android ×1

jpeg ×1

opencv ×1

python ×1

python-imaging-library ×1