Python-OpenCVを使って画像中の孤立した小領域操作を除去します。
これまでSkimageにおける形態学的処理を用いて孤立小領域の除去を行ってきましたが、コードは以下の通りです。
img=mophology.remove_small_object(img,size)
img=mophology.remove_small_holes(img、size)
その後、対応するアルゴリズムをC++環境に翻訳する必要がありますが、Skimageは対応するC++バージョンがなく、pythonアルゴリズムとC+アルゴリズム結果の整合性を確保するために、移動が必要です。したがって、OpenCVを使って孤立小領域を除去するコードを書き換えるつもりです。コードは以下の通りです

次にfindControsを使用して、二値化画像の輪郭情報を得るために、findContursのcv 2.RETR_EXTERNALは輪郭取得方式を表し、内輪の輪郭を取得する必要がないことを表しています。APPROX_NONEは輪郭曲線記録の方式を表しています。CHAIN_APPROX_NONEはすべての輪郭点を記録することを表しています。具体的なパラメータ説明は参照できます。
https://docs.opencv.org/3.0-beta/modules/imgproc/doc/structural_アナリシスand_shape_descriptors.highlight=findcontours

そして、後のcontourAreaは輪郭に囲まれた面積を取得するために用いられ、threholdは面積閾値であり、この閾値より小さい場合は孤立小領域とみなし、除去が必要である。
最後にdrawContursは孤立した小領域を取り除く方式です。除去操作は簡単です。これらの領域に0を充填すればいいです。drawContursのパラメータは以下の通りです。
https://docs.opencv.org/3.0-beta/modules/imgproc/doc/drawing_functions.highlight=drawcontours

ここで、drawContursの最初のパラメータは処理対象画像を入力し、2番目のパラメータは処理対象の孤立領域輪郭Vector、3番目のパラメータは輪郭を示す座標であり、ここで0はcontoursの1番目、4番目のパラメータは充填値を表し、ここでintegerの場合は階調図であり、1に充填し、最後のパラメータは-1であることを示している。は、この輪郭の周りを塗りつぶして処理する領域であることを示します。
例は以下の通りです


以上のPython-OpenCVを使って、画像の中で孤立している小領域操作を除去します。小編集が皆さんに共有している内容の全部です。参考にしてほしいです。私達を応援してください。
img=mophology.remove_small_object(img,size)
img=mophology.remove_small_holes(img、size)
その後、対応するアルゴリズムをC++環境に翻訳する必要がありますが、Skimageは対応するC++バージョンがなく、pythonアルゴリズムとC+アルゴリズム結果の整合性を確保するために、移動が必要です。したがって、OpenCVを使って孤立小領域を除去するコードを書き換えるつもりです。コードは以下の通りです
_,binary = cv2.threshold(img,0.1,1,cv2.THRESH_BINARY)
image,contours,hierarch=cv2.findContours(binary,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)
for i in range(len(contours)):
area = cv2.contourArea(contours[i])
if area < threshold:
cv2.drawContours(image,[contours[i]],0,0,-1)
ここで、入力画像imgはまず閾値処理を用いて二値化画像を取得し、cv 2.threstholdは閾値二値化処理を行い、0.1は設定した閾値であり、1は画像中の最大値、cv 2.THRESH_を示す。BINARYは画像処理の方法を示し、オプンCvには以下のように記録されています。
次にfindControsを使用して、二値化画像の輪郭情報を得るために、findContursのcv 2.RETR_EXTERNALは輪郭取得方式を表し、内輪の輪郭を取得する必要がないことを表しています。APPROX_NONEは輪郭曲線記録の方式を表しています。CHAIN_APPROX_NONEはすべての輪郭点を記録することを表しています。具体的なパラメータ説明は参照できます。
https://docs.opencv.org/3.0-beta/modules/imgproc/doc/structural_アナリシスand_shape_descriptors.highlight=findcontours

そして、後のcontourAreaは輪郭に囲まれた面積を取得するために用いられ、threholdは面積閾値であり、この閾値より小さい場合は孤立小領域とみなし、除去が必要である。
最後にdrawContursは孤立した小領域を取り除く方式です。除去操作は簡単です。これらの領域に0を充填すればいいです。drawContursのパラメータは以下の通りです。
https://docs.opencv.org/3.0-beta/modules/imgproc/doc/drawing_functions.highlight=drawcontours

ここで、drawContursの最初のパラメータは処理対象画像を入力し、2番目のパラメータは処理対象の孤立領域輪郭Vector、3番目のパラメータは輪郭を示す座標であり、ここで0はcontoursの1番目、4番目のパラメータは充填値を表し、ここでintegerの場合は階調図であり、1に充填し、最後のパラメータは-1であることを示している。は、この輪郭の周りを塗りつぶして処理する領域であることを示します。
例は以下の通りです


以上のPython-OpenCVを使って、画像の中で孤立している小領域操作を除去します。小編集が皆さんに共有している内容の全部です。参考にしてほしいです。私達を応援してください。