質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.35%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Python

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

Q&A

解決済

2回答

4560閲覧

画像の矩形に囲まれている箇所以外を塗りつぶしたい。

potapotapotato

総合スコア13

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Python

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

0グッド

1クリップ

投稿2021/09/09 02:39

編集2021/09/09 05:08

まず、最終目標から説明させていただきます。
この画像を
イメージ説明
この画像のように
イメージ説明
矩形の外だけを白く色を
塗りたいと考えています。逆に内側だけを色づけるものでも大丈夫です。

ペイント等のツールを使えばすぐじゃん!って話なのですが、処理の一部にこれを加えたいので質問させていただきます。

現在、いろいろ調べたのですが、同じ色を別の色に変えることはできるのですが(今回なら黒を白に)それだと矩形の外中どちらも色が変わってしまいます。
Axes.fill_between(x, y1, y2)も似たようなことをしていますが、矩形の座標は一意に定まっていないので、できなさそうです。

使用言語はpythonです。
何か良い方法があれば教えてください。よろしくお願いいたします。

実際にやったことは、以下のようなプログラムです。

python

1import cv2 2import numpy as np 3 4image = cv2.imread('kuro.png') 5# 画像の黒い部分を白に置き換える 6black = [0, 0, 0] 7white = [255, 255, 255] 8image[np.where((image == black).all(axis=2))] = white 9 10 11cv2.imwrite('shiro.png', image)

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

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

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

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

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

potapotapotato

2021/09/09 02:51

丸投げ警察さん怖いです。。。 自分はteratailのキャッチコピーでもあるように 「15分調べてもわからないことは、質問しよう!」 ということで、1時間くらい調べたうえで質問しています。 調べた内容も簡単に説明はしているつもりです。
potapotapotato

2021/09/09 02:55

teratailのルールを見ると、 コードをください・デバッグしてください等の丸投げの質問 何かを作りたいのでコードを書いてほしい、学校の課題を解いてほしい等の質問は、具体的にプログラミングで困っている質問ではないと考え、推奨していません。 とのことですので、丸投げとの意見はこれに該当していないと考えられます。 丸投げ警察さん。やめてください。 問題や質問は実際に調査や作業に取り組み、具体的なところで生まれると考えるためです。 まずは実際に作業に取り組み、つまづいたところで投稿をしてみてください。
Zuishin

2021/09/09 04:23

自分で塗りつぶさなくても、そのようなことができる画像処理ライブラリがありそうな気もしますが、ありませんか?
meg_

2021/09/09 04:27

> ペイント等のツールを使えばすぐじゃん!って話なのですが、処理の一部にこれを加えたいので質問させていただきます。 質問の画像は既存の"処理"の中で生成されたものでしょうか?どこかから入力されたものでしょうか? また画像は二色のみですか?図形は四角形以外もあり得ますか?
meg_

2021/09/09 04:31

> ということで、1時間くらい調べたうえで質問しています。 調べた内容も簡単に説明はしているつもりです。 調べた書籍や検索ワード(参考にしたサイト)も書かれると回答しやすくなるかと思います。また実際に試したコードがあるなら載せると良いです。質問者さんがどこで詰まっているのか分りやすくなると思います。
potapotapotato

2021/09/09 05:00

>質問の画像は既存の"処理"の中で生成されたものでしょうか?どこかから入力されたものでしょうか? また画像は二色のみですか?図形は四角形以外もあり得ますか? 処理の中で生成されたもので、図形は四角のみ、色も画像のような2色のみです。
Zuishin

2021/09/09 05:02

調べてないじゃないか。低評価。
potapotapotato

2021/09/09 05:10

>調べてないじゃないか。低評価。 調べました。似たようなライブラリでMatplotlibのAxes.fill_between(x, y1, y2)があったけど使えなかったことも記述しています。
Zuishin

2021/09/09 05:11

塗りつぶしのできるライブラリがあるかないかを調べてないだろう。
potapotapotato

2021/09/09 05:15

MatplotlibのAxes.fill_between(x, y1, y2)は塗りつぶしのできるものです。それが今回適していなく。ほかに調べてもいまいち出てこなかったから質問しているのです。
potapotapotato

2021/09/09 05:23

あなたが3分で見つけることができても、みんながみんな3分で見つけることができるとは限りません。なぜそんなにもひねくれたコメントができるのでしょうか。 このようなライブラリを見つけたのですが、こちらを使用して処理を行ってみてはいかがでしょうか。となぜ普通に言えないのでしょうか。
Zuishin

2021/09/09 05:24

普通の人には普通に言う。調べたかと聞いて嘘をついたり、丸投げ警察と煽りを入れたりするからに決まってる。
ishina_yum

2021/09/09 05:26

処理の中で矩形を生成しているならば、そこで処理してしまった方が早いでしょう。 もし、矩形が画像からはみ出ることもあるならば、『巨大な矩形が画像を覆い尽くしている(矩形の辺が全て画像の外側にある)』ことも考えられるわけで、その矩形を画像から検出する手段はありません。
potapotapotato

2021/09/09 05:34

>普通の人には普通に言う。調べたかと聞いて嘘をついたり、丸投げ警察と煽りを入れたりするからに決まってる。 運営の定義する丸投げはしていないのに、丸投げで低評価が押されていたので、そのように発言したまでです。実際に調べてますし、日本語で、pythonの塗りつぶしライブラリを調べてもmatplotlibのものばかりで、出てこなかったので、調べたと言って嘘もついていません。 あなたが調べることができても、それがすべての人間が調べられるとは限りません。だから知識がある人に代わりに調べてもらうのは合理的ですし、運営の意図している使いかたです。
potapotapotato

2021/09/09 05:38

>処理の中で矩形を生成しているならば、そこで処理してしまった方が早いでしょう。 それで少しうまくいかなくて、できるっちゃできるんですが後で行う処理的にそうしたくなかったので、今回質問させていただきました。この場では詳しいことが書けないので、今回別の方法を模索しています。 ちなみに、処理的には、矩形が画像の外に出るようなことは起こりえないので、そこは問題ないです。
Zuishin

2021/09/09 05:38

お前の考えが正しいと判断してるのはお前だろ? そこを忘れてないか? 他の人に聞いたか? 見てみろこの質問にどれだけ低評価が入ってるか、そして他の人の質問に入ってないかを。
ishina_yum

2021/09/09 05:42

> 矩形が画像の外に出るようなことは起こりえない > 特定の座標が必ずしも枠の外になるとは限らないからダメ どちらが正しいのでしょう? はみ出ることが起こりえないならば、画像の端が『矩形の内側』であるはずがありません。
potapotapotato

2021/09/09 05:46

端は内側にはなりませんが、矩形の枠線が乗っていることがあります。 下の回答のコメントに書いたことは、適当に画像の端を指定した場合、矩形の枠線が指定されてしまい、枠線の色が変わることになる可能性があるからです。
meg_

2021/09/09 06:01

>>処理の中で矩形を生成しているならば、そこで処理してしまった方が早いでしょう。 それで少しうまくいかなくて、できるっちゃできるんですが後で行う処理的にそうしたくなかったので、今回質問させていただきました。この場では詳しいことが書けないので、今回別の方法を模索しています。 その辺りの情報を最初から質問に書きましょう。「それで少しうまくいかなくて」の部分が大事な気がしますし、「後で行う処理的にそうしたくなかった」理由によって回答出来るかどうかも変わってくるかと思います。 私が思っていたよりも質問者さんはコードが書けるみたいですし、質問の内容も高度なもののようですので。
potapotapotato

2021/09/09 06:05

皆さま。ありがとうございました。
guest

回答2

0

ベストアンサー

結論から言うと、画像から判定するのは無理じゃないですかね。
この画像、どこが矩形の内側で、どこが外側かわかりますか?
どうやって判定すれば良いのかわからないものをプログラムにすることはできません。

処理の中で矩形を生成しているならば、そこで処理してしまうべきです。

どこが矩形の内側か?

投稿2021/09/09 05:57

ishina_yum

総合スコア509

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

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

potapotapotato

2021/09/09 06:02

その画像見て納得しました。 確かに枠線が画像の端まで行くことがあるので、その画像のようなパターンがないとも限りません。(基本怒らないけどゼロではない以上できない) 今回のパターンじゃ無理ということで、別のアプローチを試してみます。 ありがとうございました。
fana

2021/09/09 09:53 編集

何か終わったみたいだけど,話が全く意味不明. 矩形の座標がデータとして得られる立場なのであれば,困りごとは最初から何一つ存在しないということになる. (単に,矩形を描画すればよいだけ)
guest

0

ペイント等のツールを使えばすぐじゃん!って話

なのですから,そういったツールがやっている処理を自前で実装すればよいだけの話ではないのでしょうか.

ペイント等でどういった機能を用いれば所望の結果を得られるのか?
その機能の名称と「アルゴリズム」とかを合わせて検索ワードに用いるなどしてみてはどうでしょう.

例えば,外側の領域を塗りつぶせばよいと考えるならば,
「画像 塗りつぶし アルゴリズム」とか.

投稿2021/09/09 03:01

fana

総合スコア11996

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

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

potapotapotato

2021/09/09 03:18

ペイントツールでは、指定した範囲(クリックしたところと同じ色)を塗りつぶすことはできますが、今回はそのクリックする作業もしないようにしたいので、それを調べて使っても根本的解決にならないのです…
ishina_yum

2021/09/09 03:47

> クリックする作業もしないようにしたい ならば適当に点を選んで「クリックされたことにすればいいだけ」だと思いますけれど、何が問題なのでしょう?
1T2R3M4

2021/09/09 04:05

>外側の領域を塗りつぶせばよい を実現するのにyamada971さんが色を基準にしかしないのが理解できません。 何故色基準なのですか。
potapotapotato

2021/09/09 04:50

>ならば適当に点を選んで「クリックされたことにすればいいだけ」だと思いますけれど、何が問題なのでしょう? 自分の認識違いだったら申し訳ないのですが、クリックしたことのすればよいってのは、特定の座標を指定してってことなのであれば、処理によって矩形の場所が変わてくるので、特定の座標が必ずしも枠の外になるとは限らないからダメそうです。
potapotapotato

2021/09/09 05:10 編集

>何故色基準なのですか。 初心者タグ付けている通り、まだ知識が深くないです。例えば、ペイントツールなどでは、クリックしたところの色情報を取って、その色と違う色にぶち当たるまで上下左右を塗っているものだという認識を持っています。 なので、色情報を使ってやるのが良いと思っていたので、ほかのアイデアがありませんでしたし、改めて考え、調べてみたけどわかりませんでした
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問