logo
Loading...

使用cv2.imshow 與 plt.imshow 的差別 - Cupoy

1. 使用cv2.imshowr,g,b 三張圖為偏灰圖片2. 使用 plt.imshow請問為何r...

使用cv2.imshow 與 plt.imshow 的差別

2019/11/26 03:56 AM
電腦視覺深度學習論壇
Vic Chen
觀看數:0
回答數:2
收藏數:0

1. 使用cv2.imshow


r,g,b 三張圖為偏灰圖片


2. 使用 plt.imshow


請問為何r,g,b 三張圖會有點偏綠呢?


最後附上完整程式碼


#!/usr/bin/env python
# coding: utf-8

# In[41]:


import cv2
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np
get_ipython().run_line_magic('matplotlib', 'inline')


# In[4]:


img=cv2.imread('lena.png')
print("opencv 是用 "+str(type(img))+" 表示圖片格式")
print("圖片維度: "+str(img.shape))


# # Opencv在載入圖片時可選擇載入方式的格式 :
1. cv2.IMREAD_COLOR(預設)
#     * 載入包含RGB 3個channel的彩色圖片
2. cv2.IMREAD_GRAYSCALE
#     * 灰階格式
3. cv2.IMREAD_UNCHANGE
#     * 所有channel

# In[18]:


cv2.imshow('rgb',img) #(顯示的視窗名稱,要顯示的圖片)
cv2.waitKey(0)
cv2.destroyAllWindows()
#後⾯面兩兩⾏行行代表顯⽰示圖片之後,按任意鍵關閉視窗


# In[5]:


img_g=cv2.imread('lena.png',cv2.IMREAD_GRAYSCALE)


# In[6]:


while True:
    cv2.imshow('rgb',img)
    cv2.imshow('gray',img_g)
    
    k=cv2.waitKey(0)
    if k == 27 :
        cv2.destroyAllWindows()
        break


# In[7]:


img_box=cv2.imread('box.png')


# In[11]:


#把顯示圖片包成一個程式
def show_img(window_name,img_name):
    cv2.imshow(window_name,img_name)
    cv2.waitKey(0)
    cv2.destroyAllWindows()


# In[12]:


show_img('box',img_box)


# In[46]:


img_r=img[:,:,0]
img_g=img[:,:,1]
img_b=img[:,:,2]

while True:
    cv2.imshow('img',img)
    cv2.imshow('img_r',img_r)
    cv2.imshow('img_g',img_g)
    cv2.imshow('img_b',img_b)
    k=cv2.waitKey(0)
    if k == 27 :
        cv2.destroyAllWindows()
        break


# In[45]:


img_plt=mpimg.imread('lena.png')
img_plt_r=img_plt[:,:,0]
img_plt_g=img_plt[:,:,1]
img_plt_b=img_plt[:,:,2]

plt.figure(num='lena',figsize=(8,8))

plt.subplot(2,2,1)
plt.title('original')
plt.imshow(img_plt)

plt.subplot(2,2,2)
plt.title('R channel')
plt.imshow(img_plt_r)

plt.subplot(2,2,3)
plt.title('G channel')
plt.imshow(img_plt_g)

plt.subplot(2,2,4)
plt.title('B channel')
plt.imshow(img_plt_b)