John(筋肉)の備忘録的な何か

備忘録的な何かであり、進捗そのものでもあるよ!!怖い人は見ないで!

PythonとOpenCVでやった画像の最頻値

どうも、こんにちはJohn(筋肉)です。

今回は「艦これの新艦娘ゲットシーンの星が邪魔だな~」と思って、除去するプログラム書いたら、案外行けた話をします。

PythonOpenCVについては省きます。(知ってるだろうし、説明できない。)

 

どんな感じに出来たか

初めてなので、3枚の画像で最頻値を取りました。

まず、入力した3枚をどうぞ。

f:id:julia-bardera-jb:20161231013942j:plain

f:id:julia-bardera-jb:20161231013953j:plain

f:id:julia-bardera-jb:20161231014003j:plain

 

 はい。可愛いですね。推しじゃないけど。

なんか切れちゃってるのはスクショミスったからです。目をつぶってくださいな。

 

そして出力結果がこちら。

f:id:julia-bardera-jb:20161231014158j:plain

 

 

3枚の最頻値なのでちょっと星が残ったりしてますが、いい感じですね。(僕はいい感じだと思ってる)

 

どんなクソコード書いたか

さあ、我がクソコード見せてしんぜよう。こちらだ!

 

import cv2

import numpy as np

def diff_judg(xi,yj,img01,img02):
  if img01[yj,xi,0]==img02[yj,xi,0]:
    if img01[yj,xi,1]==img02[yj,xi,1]:
      if img01[yj,xi,2]==img02[yj,xi,2]:
        return True
      else:
        return False
    else:
      return False
  else:
    return False

img1=cv2.imread("./aaa.jpg")
img2=cv2.imread("./bbb.jpg")
img3=cv2.imread("./ccc.jpg")
x=600
y=360
i=0
j=-1
ans=np.zeros((y,x,3),np.uint8)

while i<x:
  while j<y-1:
    j+=1
    if diff_judg(i,j,img1,img2):
      ans[j,i]=img1[j,i]
      continue
    elif diff_judg(i,j,img1,img3):
      ans[j,i]=img1[j,i]
      continue

              elif diff_judg(i,j,img2,img3):
                     ans[j,i]=img2[j,i]
                     continue
              else:
                     ans[j,i]=img1[j,i]
                     continue

        j=-1
        i+=1

cv2.imwrite("ans.jpg",ans)

 

「 ん?最頻値じゃなくね?」

そのとおりだけど、3枚なので最頻値にはなってる。ので許して。

 

 

とまぁ、こんな感じになります!はい!何書けばいいのかわかんない!!おうちかえる!!

 

改善点あったら言ってほしいです、Python使えないので、お手柔らかに。。