Posts for: #OpenCV

Non-Local Means Denoisingでノイズ除去

Non-Local Means Denoisingでノイズ除去

本記事はQrunchからの転載です。


Non-Local Means Denoisingのアイデア

今回はノイズ除去を扱うのですが、特にガウスノイズを考えます。 これは平均が0となるノイズですので、着目しているピクセルにある意味で似ているピクセルを画像中から探してきて、それらの平均を取れば、ノイズの影響が消えたピクセルが得られるはずです。 これがNon-Local Means Denoisingのアイデアになります。

inpaintで画像の修復をする

inpaintで画像の修復をする

本記事はQrunchからの転載です。


画像に汚れがついたり、傷がついているケースの修復には、最近ではディープラーニングを使った手法が色々出ていますが、画像処理の範囲でもできることがあります。 今回はOpenCVで修復をおこなってみます。

透過変換で斜めから撮った画像を上から見下ろす

透過変換で斜めから撮った画像を上から見下ろす

本記事はQrunchからの転載です。


透過変換とは?

透過変換はアフィン変換よりも柔軟な変換になっていまして、アフィン変換ではできない台形への変換が可能です。また台形から長方形への変換も可能です。 つまり、斜めに写っているものを上から見たような感じに変換ができるというわけです。

画像へのアフィン変換

画像へのアフィン変換

本記事はQrunchからの転載です。


アフィン変換といえば、普通は2次元上の点や図形を拡大縮小したり、回転したり、平行移動したりといった変換をさします。 式の話をすると、ある2次元上の点$(x,y)$の$(x’, y’)$へのアフィン変換は次のようにして表現できます。 $$\begin{pmatrix}x’ \\ y’ \\ 1 \end{pmatrix} =\begin{pmatrix} a & b & c\\ e & f & g \\ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix}x \\ y \\ 1 \end{pmatrix}. $$ $a,b,e,f$の値によって拡大縮小、回転をおこなうようにできますし、$c,g$の値によって平行移動が可能です。

動画の書き込み

本記事はQrunchからの転載です。


OpenCVでの動画の書き込み方

次のようにしてtest.mp4という名前の動画を作成します。

fourcc = cv2.VideoWriter_fourcc("m", "p", "4", "v")
writer = cv2.VideoWriter("test.mp4",
                         fourcc,
                         30,
                         (1920, 1080))
print(writer.isOpened())

第二引数のfourccは動画のコーデックをあらわしており、mp4のときにはcv2.VideoWriter_fourccの引数には"m", “p”, “4”, “v"を指定します。他にもmpgで保存するときには"D”, “I”, “V”, “X"を指定したりできます。拡張子に対応してどういうコーデックが指定できるかは、ググっていただくのが良いかと思います。 また、第三引数にFPSを第四引数に動画の横と縦の大きさを指定しています。 isOpenedメソッドにより動画を書き込むための準備ができているかを確認できます。FalseのときにはPCがコーデックに対応していなかったりで上手くいっていません。

動画の読みこみ

本記事はQrunchからの転載です。


今日はOpenCVでの動画の読み書きを扱います。

動画の読み込み

動画の読み込みは簡単です。

最初に次のように保存されている動画を開きます。