旅行好きなソフトエンジニアの備忘録

プログラミングや技術関連のメモを始めました

OpenCV

【OpenCV】楕円内部のみぼかしたい

cv2.Blur関数を使って画像をぼかしたいのですが、四角形ではなく円もしくは楕円形状でぼかしたいという状況です。 これはマスクを利用して実現可能なことが分かったのでメモします。 import cv2 import numpy as np def apply_ellipse_blur(image, x, y, hax…

【Python】cv2.rectangleでのエラー"TypeError: an integer is required (got type tuple)"の対処方法

物体検出を行っていて、各クラスに色を割り当ててバウンディングボックスを描画したい、という状況でした。何故か修正前コードでは表題のエラーが発生し、修正後コードのような書き換えをしなければなりませんでした。本質でない部分に大分時間を使ったので…

【OpenCV】OpenCV3以降でDense SIFTを使いたい

画像から特徴量抽出する方法として、Dense SIFTを使いたいと思ったのですが、何故かOpenCV2のあるバージョンで削除されてしまったようです。ただ幸いkeypointを指定することでDense SIFTを実施できるようなのでメモします(とはいえSIFTの特許の問題があるの…

【OpenCV】 画像を合成する(アルファブレンディング)

// 画像を読み込む Mat lenna; imread("lenna.jpg").copyTo(lenna); if (lenna.empty()) { throw runtime_error("Failed to open image"); } // 画像を読み込む Mat clock; imread("clock.jpg").copyTo(clock); if (clock.empty()) { throw runtime_error("F…

【OpenCV】 照明ムラがある環境での二値化

照明ムラがある環境下で二値化を行い対象物を抽出しようとする場合、普通に二値化処理を行うと大抵上手く抽出できません。 下の画像はその例で、画像上部が明るめ、画像下部が暗めのになっています。この画像から米粒を抜き出そうとして大津の方法を適用する…

【OpenCV】 forループを使わずに指定した色を別の色に変更する

ディープラーニングの前処理として、画像のある色を別の色に変更しようとしていました。ただ、NumPyではforループをなるべく使用しないことが推奨されているため、どうやって実現すれば良いのか悩んでいましたが、ここ(Replace a range of colors with a sp…

【OpenCV】 バイラテラルフィルタの引数について

輪郭をぼかさずにノイズを除去する方法としてバイラテラルフィルタを紹介されたのですが、今一つパラメータの意味が理解できていませんでした。 void bilateralFilter(const Mat& src, Mat& dst, int d, double sigmaColor, // 何これ? double sigmaSpace, …

【OpenCV】 画像に傾いた四角形を書き込む

RotatedRectは直線を利用して描くしかないようです。。。 // 画像を読み込む Mat source; imread("lenna.jpg").copyTo(source); if (source.empty()) { throw runtime_error("Failed to open image"); } // RotatedRectを描画する Mat destination; source.c…

【OpenCV】 画像に楕円を書き込む

ellipseというメソッドを利用すると画像に楕円を書き込めますよ、というメモです。 // 画像を読み込む Mat source; imread("lenna.jpg").copyTo(source); if (source.empty()) { throw runtime_error("Failed to open image"); } Mat destination; source.co…

【OpenCV】 輪郭を強調する

先鋭化フィルタを適用して輪郭を強調する例をメモします。OpenCVには用意されていない関数ですが、フィルタを自作して適用することで簡単に作成することが出来ます。作成するフィルタは以下の通りです(http://www.wakayama-u.ac.jp/~chen/education/image/2…

【OpenCV】 穴を塗りつぶす

learnopencv.comのブログ(Filling holes in an image using OpenCV ( Python / C++ ) | Learn OpenCV)のメモになります。タイトルにあるように、OpenCVを使って穴を塗りつぶす方法についてブログに書かれており、MATLABにはimfillという関数があるけど、Op…

【OpenCV】 画像から特定パターンを探す

OpenCVの復習が必要になったのでメモしておきます。 // 画像を読み込む UMat source; imread("scene.jpg", CV_LOAD_IMAGE_GRAYSCALE).copyTo(source); if (source.empty()) { throw runtime_error("Failed to open image"); } UMat parts; imread("parts.jpg…

【OpenCV】 画像の類似度を調べる

OpenCVの復習が必要になったのでメモしておきます。 // 画像を読み込む Mat source1; imread("lenna.jpg", CV_LOAD_IMAGE_GRAYSCALE).copyTo(source1); if (source1.empty()) { throw runtime_error("Failed to open image"); } Mat source2; imread("lenna.…

【OpenCV】 動画を表示する

OpenCVの復習が必要になったのでメモしておきます。 // 動画を読み込む VideoCapture capture = VideoCapture("movie.mp4"); if (!capture.isOpened()) { throw runtime_error("Failed to open movie"); } // 動画表示用のウインドウを作成する const string…

【OpenCV】 パノラマ画像を作成する

OpenCVの復習が必要になったのでメモしておきます。 // 画像を読み込む UMat source1; imread("scene1.jpg", CV_LOAD_IMAGE_COLOR).copyTo(source1); if (source1.empty()) { throw runtime_error("Failed to open image"); } UMat source2; imread("scene2.…

【OpenCV】 画像のコーナーを検出する

OpenCVの復習が必要になったのでメモしておきます。 // グレースケールで画像を読み込む UMat source; imread("lenna.jpg", CV_LOAD_IMAGE_GRAYSCALE).copyTo(source); if (source.empty()) { throw runtime_error("Failed to open image"); } // 画像のコー…

【OpenCV】 画像から顔を検出する

OpenCVの復習が必要になったのでメモしておきます。 // グレースケールで画像を読み込む UMat source; imread("lenna.jpg", CV_LOAD_IMAGE_GRAYSCALE).copyTo(source); if (source.empty()) { throw runtime_error("Failed to open image"); } // 輝度平滑化…

【OpenCV】 特徴点検出を行う

OpenCVの復習が必要になったのでメモしておきます。 // グレースケールで画像を読み込む UMat source1; imread("lenna.jpg", CV_LOAD_IMAGE_GRAYSCALE).copyTo(source1); if (source1.empty()) { throw runtime_error("Failed to open image"); } // 画像を…

【OpenCV】 画像を合成する(加算)

OpenCVの復習が必要になったのでメモしておきます。 // グレースケールで画像を読み込む UMat source1; imread("something1.jpg", CV_LOAD_IMAGE_GRAYSCALE).copyTo(source1); if (source1.empty()) { throw runtime_error("Failed to open image"); } UMat …

【OpenCV】 画像を合成する(減算)

OpenCVの復習が必要になったのでメモしておきます。 // グレースケールで画像を読み込む UMat source1; imread("something1.jpg", CV_LOAD_IMAGE_GRAYSCALE).copyTo(source1); if (source1.empty()) { throw runtime_error("Failed to open image"); } UMat …

【OpenCV】 画像を合成する(論理積)

OpenCVの復習が必要になったのでメモしておきます。 // グレースケールで画像を読み込む UMat source1; imread("lenna.jpg", CV_LOAD_IMAGE_GRAYSCALE).copyTo(source1); if (source1.empty()) { throw runtime_error("Failed to open image"); } // 画像を…

【OpenCV】 画像に膨張処理を適用する

OpenCVの復習が必要になったのでメモしておきます。 // グレースケールで画像を読み込む UMat source; imread(argv[1], CV_LOAD_IMAGE_GRAYSCALE).copyTo(source); if (source.empty()) { throw runtime_error("Failed to open image"); } // 画像の膨張を行…

【OpenCV】 画像に収縮処理を適用する

OpenCVの復習が必要になったのでメモしておきます。 // グレースケールで画像を読み込む UMat source; imread(argv[1], CV_LOAD_IMAGE_GRAYSCALE).copyTo(source); if (source.empty()) { throw runtime_error("Failed to open image"); } // 画像の収縮を行…

【OpenCV】 画像にエッジ検出フィルタを適用する(Laplacianフィルタ)

OpenCVの復習が必要になったのでメモしておきます。 // グレースケールで画像を読み込む UMat source; imread("lenna.jpg", CV_LOAD_IMAGE_GRAYSCALE).copyTo(source); if (source.empty()) { throw runtime_error("Failed to open image"); } // エッジを検…

【OpenCV】 画像にエッジ検出フィルタを適用する(Sobelフィルタ)

OpenCVの復習が必要になったのでメモしておきます。 // グレースケールで画像を読み込む UMat source; imread("lenna.jpg", CV_LOAD_IMAGE_GRAYSCALE).copyTo(source); if (source.empty()) { throw runtime_error("Failed to open image"); } // 縦方向のエ…

【OpenCV】 画像にエッジ検出フィルタを適用する(Cannyフィルタ)

OpenCVの復習が必要になったのでメモしておきます。アルゴリズム自体の説明はここ(しぼりたてブログ Canny Edge Detection -アルゴリズム-)が詳しかったです。 // グレースケールで画像を読み込む UMat source; imread("lenna.jpg", CV_LOAD_IMAGE_GRAYSCA…

【OpenCV】 画像の一部を切り取る

OpenCVの復習が必要になったのでメモしておきます。 // 画像を読み込む UMat source; imread("lenna.jpg", CV_LOAD_IMAGE_GRAYSCALE).copyTo(source); if (source.empty()) { throw runtime_error("Failed to open image"); } // 切り取る箇所を指定する int…

【OpenCV】 画像に平滑化フィルタを適用する(メディアンフィルタ)

OpenCVの復習が必要になったのでメモしておきます。 // グレースケールで画像を読み込む UMat source; imread("lenna.jpg", CV_LOAD_IMAGE_GRAYSCALE).copyTo(source); if (source.empty()) { throw runtime_error("Failed to open image"); } // 画像を平滑…

【OpenCV】 画像に平滑化フィルタを適用する(ガウシアンフィルタ)

OpenCVの復習が必要になったのでメモしておきます。 // グレースケールで画像を読み込む UMat source; imread("lenna.jpg", CV_LOAD_IMAGE_GRAYSCALE).copyTo(source); if (source.empty()) { throw runtime_error("Failed to open image"); } // 画像を平滑…

【OpenCV】 画像に平滑化フィルタを適用する(単純平滑化フィルタ)

OpenCVの復習が必要になったのでメモしておきます。 // グレースケールで画像を読み込む UMat source; imread("lenna.jpg", CV_LOAD_IMAGE_GRAYSCALE).copyTo(source); if (source.empty()) { throw runtime_error("Failed to open image"); } // 画像を平滑…