🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

1934閲覧

OpenCVを用いた対象物の切り抜き

yamataro1412

総合スコア4

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/11/02 08:39

前提・実現したいこと

画像から対象物のみを二値化することで切り抜きたい。

発生している問題・エラーメッセージ

対象物と背景との色の差がほぼないので閾値を変えることでは対象物と背景を分けることができないため、対象物の周りのみある閾値で二値化し対象物を1、そしてその周りを0に二値化しようと考えました。
そこで調べたところInRangeを用いれば実現可能と考えたのですが、グレースケールでの方法が私の能力不足から理解できなかったため質問させていただきました。
(https://www.pynote.info/entry/opencv-inrange)

該当のソースコード

import cv2
import matplotlib.pyplot as plt
import numpy as np

rc = cv2.imread("sample.png")

dst = cv2.inRange(src, (0, 0, 49), (255, 255, 255))

fig, ax = plt.subplots(facecolor="w")
ax.imshow(dst, cmap="gray")

plt.show()

試したこと

上のコードから考えてみたのですが、cv2.inRange(src, (0, 0, 49), (255, 255, 255))
の部分で範囲を指定していると思うのですが、この49の意味があまりわかりません。

それ以外にも対象物のない背景のみの画像もあるのでpythonで対象物のある画像から背景の画像を引いた後にある値で二値化してみましたが、背景と対象物の色の値が近いのでうまくいきませんでした。

勉強不足でうまく言葉を使えていないかもしれませんが、お答えいただけると幸いです。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

上のコードから考えてみたのですが、cv2.inRange(src, (0, 0, 49), (255, 255, 255))

の部分で範囲を指定していると思うのですが、この49の意味があまりわかりません。

RGB 画像の場合、各画素は (blue, green, red) の3つの値で表されます。
cv2.inRange(src, (0, 0, 49), (255, 255, 255))
0 <= blue <= 255, 0 <= green <= 255, 49 <= red <= 255 の画素は255、そうでない画素は0として2値化する処理になります。

投稿2019/11/02 08:47

tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yamataro1412

2019/11/02 09:51

tiitoiさん 返信ありがとうございます! 上の例だと、赤が49未満が0となりそれ以外が255となるという意味だと解釈しました。 丁寧な説明ありがとうございました。
tiitoi

2019/11/02 11:12

その認識であってますよ
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問