OpenCVで画像をくっきりさせる
OpenCVに関する記述が出てきて、画像をくっきりさせる という技術があることに驚いたので、自分の画像で試してみました。
事前準備
必要なパッケージのインソール
OpenCVが必要です。anaconda には無いようなのでpipでインストールします
pip install opencv-python pip install opencv-contrib-python
画像を取り込んで確認する
import numpy as np import matplotlib.pyplot as plt
%matplotlib inline
import cv2
image_cap_bgr = cv2.imread("data/cap.jpg",cv2.IMREAD_COLOR)
plt.imshow(image_cap_bgr)
plt.axis("off")
plt.show()
元の画像がわかりにくかったですが、openCVはRGBではなくBGRで読み取るため、赤と青が逆転しています。
image_cap_rgb = cv2.cvtColor(image_cap_bgr,cv2.COLOR_BGR2RGB)
plt.imshow(image_cap_rgb)
plt.axis("off")
plt.show()
保存しておきます。 ただし、OpenCVは勝手にBGRだと思って保存しますので、Matplotlibで表示するためにRGBにしたものを再びBGRに戻して保存しないといけません。
cv2.imwrite("image_cap_rgb.jpg",,cv2.cvtColor(image_cap_rgb,cv2.COLOR_RGB2BGR))
画像をくっきりさせる
画像をぼやかす(blur)は、各ピクセルを近傍のピクセルの平均値に変換すること。くっきりさせるのはその逆という概念になります
一旦、とある本にあったカーネルを丸パクリしてみます
kernel = np.array([[0,-1,0], [-1,5,-1], [0,-1,0]])
image_cap_sharp1 = cv2.filter2D(image_cap_rgb,-1,kernel)
plt.imshow(image_cap_sharp1)
plt.axis("off")
plt.show()
cv2.imwrite("image_cap_sharp1.jpg",cv2.cvtColor(image_cap_sharp1,cv2.COLOR_RGB2BGR))
確かに表面の凸凹が実際より強調された気がしますが、なんかもっとわかりやすい例やピンボケ画像が必要ですね。1
ぼかしの逆をすればいいって目からウロコでしたが、知っている人からすれば当たり前のことなんでしょうか。個人的には凄く新鮮でした