python – Opencv – 灰度模式与灰色转换
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – Opencv – 灰度模式与灰色转换,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1796字,纯文字阅读大概需要3分钟。
内容图文
![python – Opencv – 灰度模式与灰色转换](/upload/InfoBanner/zyjiaocheng/706/537ea76133fa42f5b69caaeaf1bf54c4.jpg)
我在opencv(2.4.11)python(2.7)中工作,正在玩灰色图像.在灰度模式下加载图像并将图像从BGR转换为灰色时,我发现了一种不寻常的行为.以下是我的实验代码:
import cv2
path = 'some/path/to/color/image.jpg'
# Load color image (BGR) and convert to gray
img = cv2.imread(path)
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Load in grayscale mode
img_gray_mode = cv2.imread(path, 0)
# diff = img_gray_mode - img_gray
diff = cv2.bitwise_xor(img_gray,img_gray_mode)
cv2.imshow('diff', diff)
cv2.waitKey()
当我查看差异图像时,我可以看到左边的像素而不是黑色的喷射图像.你能说出任何理由吗?使用灰度图像的正确方法是什么.
附:当我在SIFT中使用这两个图像时,关键点是不同的,这可能导致不同的结果,特别是在处理质量差的图像时.
解决方法:
注意:这不是重复,因为OP知道来自cv2.imread的图像是BGR格式(不同于建议的重复问题,假设它是RGB,因此提供的答案仅解决该问题)
为了说明,我打开了这个相同颜色的JPEG图像:
一旦使用转换
img = cv2.imread(path)
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
另一种是以灰度模式加载它
img_gray_mode = cv2.imread(path, cv2.IMREAD_GRAYSCALE)
就像你记录的那样,两幅图像之间的差异并不完全是0,我可以看到左右两侧的差异像素
我也总结了差异
import numpy as np
np.sum(diff)
# I got 6143, on a 494 x 750 image
我尝试了所有cv2.imread()模式
在cv2.imread()的所有IMREAD_模式中,只能使用COLOR_BGR2GRAY转换IMREAD_COLOR和IMREAD_ANYCOLOR,并且它们都给了我与IMREAD_GRAYSCALE中打开的图像相同的差异.
差异似乎并不大.我的猜测来自两种方法中数值计算的差异(加载灰度与转换为灰度)
当然,您要避免的是在特定版本的图像上微调您的代码,以发现它对于来自不同来源的图像来说是次优的.
简而言之,我们不要混合处理管道中的版本和类型.
所以我会保持图像源均匀,例如如果您从BGR中的摄像机捕获图像,那么我将使用BGR作为源,并将BGR转换为灰度转换cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
反之亦然,如果我的最终源是灰度,那么我将以灰度cv2.imread(path,cv2.IMREAD_GRAYSCALE)打开文件和视频捕获
内容总结
以上是互联网集市为您收集整理的python – Opencv – 灰度模式与灰色转换全部内容,希望文章能够帮你解决python – Opencv – 灰度模式与灰色转换所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。