快速解決cv2.imread()讀取圖像為BGR的問(wèn)題
opencv讀取圖像為b,g,r方法,比如
img = cv2.imread("xx.jpg") cv2.imshow("xx",img)
展示的結(jié)果是正常的:
但是此時(shí)讀取到的img已經(jīng)為bgr方式了,如果我們?cè)儆闷渌褂胷gb方式讀取的函數(shù)進(jìn)行讀取時(shí)就會(huì)出錯(cuò),比如我用plt對(duì)圖像進(jìn)行顯示,效果如下:
因?yàn)閜lt函數(shù)是rgb方式讀取的,所以會(huì)出錯(cuò)。這時(shí)我們可以手動(dòng)改變img的通道順序,如下:
b,g,r = cv2.split(img) img_rgb = cv2.merge([r,g,b]) plt.figure() plt.imshow(img_rgb) plt.show()
這時(shí)img_rgb就是rgb順序的了.那么這時(shí)再用cv2.imshow()顯示出來(lái),rgb錯(cuò)誤:
補(bǔ)充:盤點(diǎn)踩過(guò)的關(guān)于cv2 和PIL 圖像讀取的一些小坑
1、首先像素讀取順序不同
PIL 讀取圖像時(shí)的像素順序是標(biāo)準(zhǔn)的RGB
from PIL import Image img = Image.open("test.jpg") print img.size print img.getpixel((0,0))
輸出結(jié)果是
(533, 800) (217, 229, 225)
cv2 讀取圖像時(shí)的像素順序是標(biāo)準(zhǔn)的BGR
img = cv2.imread(""test.jpg"") print img.shape print img[0][0]
輸出結(jié)果是
(800, 533, 3) [225 229 217]
若要cv2讀取完圖像也是RGB格式,則按如下方法
img = cv2.imread(""test.jpg"")[..., ::-1] print img.shape print img[0][0]
輸出結(jié)果是
(800, 533, 3) [217 229 225]
和用PIL 讀取完的一致
2、cv2 圖像讀取方法的參數(shù)解釋
首先我們先來(lái)看一下這個(gè)函數(shù)的定義
def imread(filename, flags=None)
filename
參數(shù)傳入的是圖像路徑,支持解析的圖像格式基本上覆蓋全了
- 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::ImreadModes
Flags指定了所讀取圖片的顏色類型, 默認(rèn)值為1
對(duì)應(yīng)值為 -1 到 4
參數(shù) | 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. |
參數(shù) | Value |
---|---|
flag=-1時(shí) | 8位深度,原通道 |
flag=0 | 8位深度,1通道 |
flag=1 | 8位深度 ,3通道 |
flag=2 | 原深度,1通道 |
flag=3 | 原深度,3通道 |
flag=4 | 8位深度 ,3通道 |
IMREAD_UNCHANGED
:不進(jìn)行轉(zhuǎn)化,比如保存為了16位的圖片,讀取出來(lái)仍然為16位。
IMREAD_GRAYSCALE
:進(jìn)行轉(zhuǎn)化為灰度圖,比如保存為了16位的圖片,讀取出來(lái)為8位,類型為CV_8UC1。
IMREAD_COLOR
:進(jìn)行轉(zhuǎn)化為三通道圖像。
IMREAD_ANYDEPTH
:如果圖像深度為16位則讀出為16位,32位則讀出為32位,其余的轉(zhuǎn)化為8位。
IMREAD_ANYCOLOR
:
IMREAD_LOAD_GDAL
:使用GDAL驅(qū)動(dòng)讀取文件,GDAL(Geospatial Data Abstraction Library)是一個(gè)在X/MIT許可協(xié)議下的開源柵格空間數(shù)據(jù)轉(zhuǎn)換庫(kù)。它利用抽象數(shù)據(jù)模型來(lái)表達(dá)所支持的各種文件格式。它還有一系列命令行工具來(lái)進(jìn)行數(shù)據(jù)轉(zhuǎn)換和處理。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
基于Python實(shí)現(xiàn)圖像文字識(shí)別OCR工具
在工作、生活中常常會(huì)用到,比如票據(jù)、漫畫、掃描件、照片的文本提取。本文主要介紹了基于PyQt + PaddleOCR實(shí)現(xiàn)的一個(gè)桌面端的OCR工具,用于快速實(shí)現(xiàn)圖片中文本區(qū)域自動(dòng)檢測(cè)+文本自動(dòng)識(shí)別,需要的朋友可以參考一下2021-12-12Django contenttypes 框架詳解(小結(jié))
這篇文章主要介紹了Django contenttypes 框架詳解(小結(jié)),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-08-08python3使用sqlite3構(gòu)建本地持久化緩存的過(guò)程
日常python開發(fā)中會(huì)遇到數(shù)據(jù)持久化的問(wèn)題,今天記錄下如何使用sqlite3進(jìn)行數(shù)據(jù)持久化,并提供示例代碼及數(shù)據(jù)查看工具,需要的朋友可以參考下2023-11-11Python命令行參數(shù)解析模塊optparse使用實(shí)例
這篇文章主要介紹了Python命令行參數(shù)解析模塊optparse使用實(shí)例,本文講解了增加選項(xiàng)(add_option())、行為(action)、設(shè)置默認(rèn)值(default)、生成幫助提示(help)、設(shè)置boolean值、錯(cuò)誤處理、選項(xiàng)組(Grouping Options)等內(nèi)容,需要的朋友可以參考下2015-04-04Python多線程處理實(shí)例詳解【單進(jìn)程/多進(jìn)程】
這篇文章主要介紹了Python多線程處理,結(jié)合實(shí)例形式總結(jié)分析了Python單進(jìn)程、多進(jìn)程、多線程等相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2019-01-01