OpenCV——Opencv彩色圖像在matplot中顯示問題的解決
由于OpenCV是以BGR模式加載圖像,而matplotlib則是以常見的RGB模式顯示圖像,因此通過OpenCV加載的彩色圖像用matplotlib顯示時會出現(xiàn)問題,針對此問題,這里主要提出三種解決方案。
我們先來看看直線用matplotlib顯示opencv加載的彩色圖像出現(xiàn)的效果:
import cv2
import matplotlib.pyplot as plt
img = cv2.imread("messi5.jpg")
cv2.imshow("BGR", img)
cv2.waitKey(0)
plt.imshow(img)
plt.title("BGR")
plt.show()
opencv005.png
|
opencv004.png
|
---|---|
opencv顯示效果 | matplotlib顯示效果 |
第一種方法
這種方式利用cv2.split()和cv2.merge()函數(shù)將加載的圖像先按照BGR模式分開哥哥通道,然后再按照RGB模式合并圖像,代碼如下:
import cv2
import matplotlib.pyplot as plt
b, g, r = cv2.split(img)
img2 = cv2.merge([r, g, b])
plt.subplot(1, 2, 1)
plt.imshow(img)
plt.title("BGR")
plt.subplot(1, 2, 2)
plt.imshow(img2)
plt.title('RGB')
plt.show()
效果如下:
opencv006.png
第二種方法
這種方法是使用數(shù)組的逆序,將最后一位轉(zhuǎn)置一下,代碼如下:
import cv2
import matplotlib.pyplot as plt
img = cv2.imread("messi5.jpg")
img2 = img[...,::-1]
plt.subplot(1, 2, 1)
plt.imshow(img)
plt.title("BGR")
plt.subplot(1, 2, 2)
plt.imshow(img2)
plt.title('RGB')
plt.show()
效果如下:
opencv006.png
第三種方法
使用opencv自帶的模式轉(zhuǎn)換函數(shù)cv2.cvtColor()
,代碼如下:
import cv2
import matplotlib.pyplot as plt
img = cv2.imread("messi5.jpg")
img2 = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.subplot(1, 2, 1)
plt.imshow(img)
plt.title("BGR")
plt.subplot(1, 2, 2)
plt.imshow(img2)
plt.title('RGB')
plt.show()
效果如下:
opencv006.png