BETA

Python OpenCV 画像のRGB取得

投稿日:2019-12-01
最終更新:2019-12-12

opencvでマスキングでは読み込んだ画像のピンク色の部分を切り出しました
今日は「読み込んだ画像のRGBを取得」「そのRGBに近い色で他の画像をマスキング」してみます!

参考:Python + OpenCVによる色情報の取得

from IPython.display import Image  
import cv2    
import numpy as np    

kugel_img = cv2.imread("./christmas_kugel02_pink.png")   
Image("./christmas_kugel02_pink.png")  

いらすとやのクリスマスオーナメントの画像からピンク色の部分のRGBを取得します

# ピンクの範囲範囲を切り出し(ここは手動で値を設定)  
# 横  
boxFromX = 50 # ここから  
boxToX = 100 # ここまで  
# 縦  
boxFromY = 150  
boxToY = 200  

imgBox = kugel_img[boxFromY: boxToY, boxFromX: boxToX]  
cv2.imwrite("./pink.jpg", imgBox)  
Image(filename='./pink.jpg')   

# RGB平均値を出力  
# flattenで一次元化しmeanで平均を取得   
b = imgBox.T[0].flatten().mean()  
g = imgBox.T[1].flatten().mean()  
r = imgBox.T[2].flatten().mean()  

# 小数点切り捨て  
import math  
b = math.floor(b)  
g = math.floor(g)  
r = math.floor(r)  

print("B:{}  G:{}  R:{}" .format(b,g,r))  

B:159 G:114 R:229

切り出したピンクの範囲のRGBの平均値が取得できました!
次はこの色に近い色をでツリーの画像をマスキングします

tree_img = cv2.imread("./christmastree_decoration.png")   
Image(filename='./christmastree_decoration.png')   

最初に読み込んだピンクのオーナメントが左上にありますね

# さっき切り出したピンクの範囲のBGRに近い色を指定  
lower_color = np.array([b,g,r])    
upper_color = np.array([255,240,255])    

# マスキング    
tree_mask = cv2.inRange(tree_img, lower_color, upper_color)    
output = cv2.bitwise_and(tree_img, tree_img, mask=tree_mask)    

cv2.imwrite("./mask_tree_img.jpg", output)    
Image(filename='./mask_tree_img.jpg')    

ピンクのオーナメントの花柄部分とプレゼントのオーナメントのリボンが切り抜けました
(白いところも切り抜けてしまった…)

これを応用して画面から画像の「好きな色の範囲」を選択して、RGB値を保存
→ 好きな色に近い色の画像をピックアップする とかやってみたいな~ 

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

だいたい急に挑戦してゴールにたどり着かずに飽きる日々です

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう