为什么用Python的openCV读取图片与PIL读取的图片像素值会不一样?

我首先尝试用PIL读取同一张图片,img1=Image.open('000008.jpg')print(img1.mode)print(img1.getpixel((25... 我首先尝试用PIL读取同一张图片,
img1 = Image.open('000008.jpg')
print(img1.mode)
print(img1.getpixel((252,252)))
print(img1.size)
输出对角线(252,252)位置的像素值为:(0, 4, 40)
再用opencv读取相同图片,已经考虑转换为RGB通道的情况下,输出同样位置的像素值,
img2 = cv2.imread('000008.jpg')[..., ::-1]
# img2 = cv2.cvtColor(img2,cv2.COLOR_BGR2RGB)
print(img2[252][252])
print(img2.shape)
结果却为:[ 0 4 38]

接着,我又将PIL转换为numpy格式,img1 = np.array(img1,dtype=np.float32)
结果与PIL一致,为(0, 4, 40),和opencv依然不同,

有没有大神能够帮助解答一下为啥相同位置的像素值不一样呢?有没有办法解决这个问题?
展开
 我来答
windblast
2019-10-16 · 知道合伙人软件行家
windblast
知道合伙人软件行家
采纳数:5633 获赞数:13622
毕业于空军第一航空学院电子专业,1991年开始接触电脑,从事多年计算机编程,具有较丰富的经验。

向TA提问 私信TA
展开全部

经测试,同一张图片,使用 PIL 和 OpenCv 库读取的数据是一样的(经过BGR转成RGB):

执行结果:

建议:可以尝试更新 PIL 或是 OpenCv 库。

本机测试环境: Python 3.7+Pillow 6.2 +opencv-python 4.1

羊野约
2019-11-08
知道答主
回答量:27
采纳率:0%
帮助的人:5.2万
展开全部
的确是不一样的。
以下是我用两种方法对一张图片做的差值。解决方案暂时没有想到。建议还是只用一种读取方式。
[[[254 1 0]
[254 1 0]
[254 1 0]
...
[ 0 0 4]
[ 0 255 3]
[ 0 0 1]]
[[ 0 0 0]
[255 1 0]
[ 0 0 0]
...
[ 0 255 2]
[ 0 255 2]
[255 1 0]]
[[ 0 0 0]
[254 0 1]
[ 0 0 0]
...
[ 0 0 2]
[ 0 255 2]
[ 0 0 0]]
...
[[ 0 0 0]
[ 0 0 0]
[ 0 0 0]
...
[ 0 0 0]
[ 0 0 0]
[ 0 0 0]]
[[ 0 0 0]
[ 0 0 0]
[ 0 0 0]
...
[ 0 0 0]
[ 0 0 0]
[ 0 0 0]]
[[ 0 0 0]
[ 0 0 0]
[ 0 0 0]
...
[ 0 0 0]
[ 0 0 0]
[ 0 0 0]]]
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式