PythonとOpenCVでやった画像の最頻値
どうも、こんにちはJohn(筋肉)です。
今回は「艦これの新艦娘ゲットシーンの星が邪魔だな~」と思って、除去するプログラム書いたら、案外行けた話をします。
PythonとOpenCVについては省きます。(知ってるだろうし、説明できない。)
どんな感じに出来たか
初めてなので、3枚の画像で最頻値を取りました。
まず、入力した3枚をどうぞ。
はい。可愛いですね。推しじゃないけど。
なんか切れちゃってるのはスクショミスったからです。目をつぶってくださいな。
そして出力結果がこちら。
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 Falseimg1=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]
continueelif diff_judg(i,j,img2,img3):
ans[j,i]=img2[j,i]
continue
else:
ans[j,i]=img1[j,i]
continuej=-1
i+=1cv2.imwrite("ans.jpg",ans)
「 ん?最頻値じゃなくね?」
そのとおりだけど、3枚なので最頻値にはなってる。ので許して。
とまぁ、こんな感じになります!はい!何書けばいいのかわかんない!!おうちかえる!!
改善点あったら言ってほしいです、Python使えないので、お手柔らかに。。