时间:2021-05-22
opencv读取图像为b,g,r方法,比如
img = cv2.imread("xx.jpg")cv2.imshow("xx",img)展示的结果是正常的:
但是此时读取到的img已经为bgr方式了,如果我们再用其他使用rgb方式读取的函数进行读取时就会出错,比如我用plt对图像进行显示,效果如下:
因为plt函数是rgb方式读取的,所以会出错。这时我们可以手动改变img的通道顺序,如下:
b,g,r = cv2.split(img)img_rgb = cv2.merge([r,g,b])plt.figure()plt.imshow(img_rgb)plt.show()这时img_rgb就是rgb顺序的了.那么这时再用cv2.imshow()显示出来,rgb错误:
补充:盘点踩过的关于cv2 和PIL 图像读取的一些小坑
PIL 读取图像时的像素顺序是标准的RGB
from PIL import Imageimg = Image.open("test.jpg")print img.sizeprint img.getpixel((0,0))输出结果是
(533, 800)(217, 229, 225)cv2 读取图像时的像素顺序是标准的BGR
img = cv2.imread(""test.jpg"")print img.shapeprint img[0][0]输出结果是
(800, 533, 3)[225 229 217]若要cv2读取完图像也是RGB格式,则按如下方法
img = cv2.imread(""test.jpg"")[..., ::-1]print img.shapeprint img[0][0]输出结果是
(800, 533, 3)[217 229 225]和用PIL 读取完的一致
首先我们先来看一下这个函数的定义
def imread(filename, flags=None)filename
参数传入的是图像路径,支持解析的图像格式基本上覆盖全了
- Windows bitmaps - \*.bmp, \*.dib (always supported)- JPEG files - \*.jpeg, \*.jpg, \*.jpe (see the *Note* section)- JPEG 2000 files - \*.jp2 (see the *Note* section)- Portable Network Graphics - \*.png (see the *Note* section)- WebP - \*.webp (see the *Note* section)- Portable image format - \*.pbm, \*.pgm, \*.ppm \*.pxm, \*.pnm (always supported)- Sun rasters - \*.sr, \*.ras (always supported)- TIFF files - \*.tiff, \*.tif (see the *Note* section)- OpenEXR Image files - \*.exr (see the *Note* section)- Radiance HDR - \*.hdr, \*.pic (always supported)- Raster and Vector geospatial data supported by GDAL (see the *Note* section)flags
@param flags Flag that can take values of cv::ImreadModesFlags指定了所读取图片的颜色类型, 默认值为1
对应值为 -1 到 4
参数 Value IMREAD_UNCHANGED If set, return the loaded image as is (with alpha channel, otherwise it gets cropped). IMREAD_GRAYSCALE If set, always convert image to the single channel grayscale image. IMREAD_COLOR If set, always convert image to the 3 channel BGR color image. IMREAD_ANYDEPTH If set, return 16-bit/32-bit image when the input has the corresponding depth, otherwise convert it to 8-bit. IMREAD_ANYCOLOR If set, the image is read in any possible color format. IMREAD_LOAD_GDAL If set, use the gdal driver for loading the image. 参数 Value flag=-1时 8位深度,原通道 flag=0 8位深度,1通道 flag=1 8位深度 ,3通道 flag=2 原深度,1通道 flag=3 原深度,3通道 flag=4 8位深度 ,3通道IMREAD_UNCHANGED :不进行转化,比如保存为了16位的图片,读取出来仍然为16位。
IMREAD_GRAYSCALE :进行转化为灰度图,比如保存为了16位的图片,读取出来为8位,类型为CV_8UC1。
IMREAD_COLOR :进行转化为三通道图像。
IMREAD_ANYDEPTH :如果图像深度为16位则读出为16位,32位则读出为32位,其余的转化为8位。
IMREAD_ANYCOLOR :
IMREAD_LOAD_GDAL :使用GDAL驱动读取文件,GDAL(Geospatial Data Abstraction Library)是一个在X/MIT许可协议下的开源栅格空间数据转换库。它利用抽象数据模型来表达所支持的各种文件格式。它还有一系列命令行工具来进行数据转换和处理。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
引言这几天做点小东西,涉及到OpenCV读取中文图像的问题如果直接读取中文路径的图像,往往返回[]importcv2cv_im=cv2.imread(‘老干妈.
原图代码src=cv2.imread("28.png")gray_src=cv2.cvtColor(src,cv2.COLOR_BGR2GRAY)#cv2.im
本项目利用python以及opencv实现信用卡的数字识别前期准备导入工具包定义功能函数模板图像处理读取模板图像cv2.imread(img)灰度化处理cv2.
如下所示:importcv2im=cv2.imread('2.jpg')ifimisNone:print("图像为空")#cv2.imshow("ss",im)
图片人脸识别importcv2filepath="img/xingye-1.png"img=cv2.imread(filepath)#读取图片gray=cv2.