iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 14
0
Software Development

【錢不夠買ps的我,只好用OpenCV來修圖了!】系列 第 14

【沒錢ps,我用OpenCV!】Day 14 - 進階修圖1,運用 OpenCV 顯示圖片直方圖、分離與合併RGB通道 show histogram, split, merge RGB channel

  • 分享至 

  • xImage
  •  

先來看看今天的結果圖

https://ithelp.ithome.com.tw/upload/images/20200926/201204248a6XSR8PCq.png

還是繼續請我們的貓貓助教來幫忙XDDDD

-> 此篇文章的程式碼 github

Day14_分離合併RGB直方圖_histogram_split_merge.ipynb

前言

基本修圖技能學習完之後,
再來我們要來學一些比較進階會使用的修圖技巧囉!

運用 OpenCV 顯示圖片RGB直方圖、分離與合併RGB三通道

運用 OpenCV 分離RGB三通道

def split_RGBThreeChannel(img):
    (B, G, R) = cv2.split(img) # 3 channel
    
    # make all zeros channel
    zeros = np.zeros(img.shape[:2], dtype = np.uint8)

    print("R channel:")
    show_img(merge_RGBThreeChannel(R=R, G=zeros, B=zeros))
    print("G channel:")
    show_img(merge_RGBThreeChannel(R=zeros, G=G, B=zeros))
    print("B channel:")
    show_img(merge_RGBThreeChannel(R=zeros, G=zeros, B=B))
    
    
    return R, G, B

分離RGB三通道使用 cv2.split 的方式,

有些時候我們在進階修圖會針對單一通道的顏色進行調整,
此時分離GRB三個通道就是非常重要的技術了!

https://ithelp.ithome.com.tw/upload/images/20200926/20120424gr76CgBJ9L.png

運用 OpenCV 合併RGB三通道

def merge_RGBThreeChannel(R, G, B):
    img = cv2.merge([B, G, R])
    
    return img

使用 cv2.merge 這個函數,
通常我們在進階修圖中,會先分離RGB三通道,
進行各自顏色通道的調整後,
最後合併RGB三通道,完成我們的修圖。

https://ithelp.ithome.com.tw/upload/images/20200926/20120424v2qe3QiVNp.png

運用 OpenCV 顯示圖片RGB直方圖

def show_histogram(img):
    # 畫出 RGB 三種顏色的分佈圖
    color = ('b','g','r')
    plt.style.use('dark_background')
    plt.figure(figsize=(10,5))
    for idx, color in enumerate(color):
        histogram = cv2.calcHist([img],[idx],None,[256],[0, 256])
        plt.plot(histogram, color = color)
        plt.xlim([0, 256])
    
    plt.show()

運用前面分離RGB三通道的技術,
我們可以針對RGB各通道各自畫出他們的直方圖。

在之後的進階修圖中,我們會觀察各顏色通道分佈的直方圖,
更細部的調整各顏色通道的數值。

https://ithelp.ithome.com.tw/upload/images/20200926/20120424FAfqSKoixc.png

Reference

https://blog.gtwang.org/programming/opencv-drawing-functions-tutorial/

https://blog.csdn.net/sunny2038/article/details/9080047

https://www.jianshu.com/p/9fd339f806a7


上一篇
【沒錢ps,我用OpenCV!】Day 13 - 基本修圖5,運用 OpenCV 在圖片上寫文字、查色碼、顯示色碼顏色 write text, get and show RGB Color Code
下一篇
【沒錢ps,我用OpenCV!】Day 15 - 進階修圖2,OpenCV 當然也有像 ps 圖層的功能! 什麼?圖片也能加減法?! Add, Subtract, AddWeighted
系列文
【錢不夠買ps的我,只好用OpenCV來修圖了!】30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言