LoginSignup
1
2

More than 5 years have passed since last update.

【画像合成】OpenCVで元絵とGuided_BackPropagationの画像合成♪

Posted at

このところ、Grad_camをいろいろ試しているが、そこで大活躍なツール、画像合成の記事を書いておこうと思う。

以前、以下の記事で取り上げた。
【画像合成】OpenCVで積算によりノイズ除去をやってみた♪
【参考】
Arithmetic Operations on Images@OpenCV

コードは以下のとおり

img1とimg2を入力キーの割合で合成します。6以外の時の合成画像はおまけに置きました。

import cv2
import matplotlib.pyplot as plt

img1 = cv2.imread('total_test_image1_g6.jpg')
#img2 = cv2.imread('total_test_gradcam_g6.jpg')
img2 = cv2.imread('total_test_guided_g6.jpg')

rows,cols,channels = img2.shape
roi = img1[0:rows, 0:cols ]
cv2.imshow('org1',img1)
cv2.imshow('org2',img2)
cv2.waitKey(0)
cv2.destroyAllWindows()
a =1
k=0
while True:
    dst = cv2.addWeighted(img2,a,roi,1-a,0)
    cv2.imshow('dst',dst)
    k=cv2.waitKey(0)&0xff
    if k ==ord('q'):
        cv2.imwrite('results'+str(a)+'.jpg',dst)
        break
    elif k ==ord('1'):
        a = 0.1        
    elif k ==ord('2'):
        a = 0.2
    elif k ==ord('3'):
        a = 0.3
    elif k ==ord('4'):
        a = 0.4
    elif k ==ord('5'):
        a = 0.5    
    elif k ==ord('6'):
        a = 0.6
    elif k ==ord('7'):
        a = 0.7
    elif k ==ord('8'):
        a = 0.8
    elif k ==ord('9'):
        a = 0.9
    elif k ==ord('0'):
        a = 1        
cv2.destroyAllWindows()

結果

キーを1~10まで変えると以下のとおりになりました。
以下はキーが6を押したときのものです。
results0.6.jpg

画素の積(bitwise_and)

import cv2
import matplotlib.pyplot as plt

img1 = cv2.imread('total_test_image1_g6.jpg')
#img2 = cv2.imread('total_test_gradcam_g6.jpg')
img2 = cv2.imread('total_test_guided_g6.jpg')

rows,cols,channels = img2.shape
roi = img1[0:rows, 0:cols ]
cv2.imshow('org1',img1)
cv2.imshow('org2',img2)
cv2.waitKey(0)
cv2.destroyAllWindows()
a =1
k=0
while True:
    dst = cv2.bitwise_and(img2*a,roi*(1-a))  #,mask = mask_inv)
    #dst = cv2.addWeighted(img2,a,roi,1-a,0)
    cv2.imshow('dst',dst)
    k=cv2.waitKey(0)&0xff
    if k ==ord('q'):
        plt.imshow(dst)
        #cv2.imwrite('results_multiply'+str(a)+'.jpg',dst)
        plt.savefig('results_multiply'+str(a)+'.jpg')
        plt.pause(1)
        plt.close()
        break
    elif k ==ord('1'):
        a = 0.1        
    elif k ==ord('2'):
        a = 0.2
    elif k ==ord('3'):
        a = 0.3
    elif k ==ord('4'):
        a = 0.4
    elif k ==ord('5'):
        a = 0.5    
    elif k ==ord('6'):
        a = 0.6
    elif k ==ord('7'):
        a = 0.7
    elif k ==ord('8'):
        a = 0.8
    elif k ==ord('9'):
        a = 0.9
    elif k ==ord('g'):
        a = 0.95
    elif k ==ord('0'):
        a = 1        
cv2.destroyAllWindows()

結果

枠が協調されいて、また画像がもう一つだが、一応出来たようです。

results_multiply0.2.jpg

results_multiply0.9.jpg

results_multiply0.95.jpg

まとめ

・どの程度の比で合成するか迷ってましたが、簡単に合成できました
・画素の積は完成度低いですが、まあここから一工夫で使えそうです

・本論はも少し実験重ねてから、次回まとめます

おまけ


results0.1.jpg

results0.2.jpg

results0.3.jpg

results0.4.jpg

results0.5.jpg

results0.7.jpg

results0.8.jpg

results0.9.jpg

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2