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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

プログラミング言語

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

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Python

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

Q&A

解決済

3回答

723閲覧

単色では無い画素値の範囲指定が出来ない

Vamosj1VIVA

総合スコア3

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

プログラミング言語

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

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Python

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

0グッド

0クリップ

投稿2021/09/01 02:34

前提・実現したいこと

初めて質問します。初心者なので大変初歩的な質問ですがよろしくお願いいたします。Google colabで画像処理を行っています。そこで画像の色を変更するプログラムを作成しています。そこで画素値(0,255,0)といった他の色が混ざっていない単色であれば色変更が可能なのですが、私が扱っている画像は例えばBGRのBが100~105といった1つの値だけでは表現できない色となっております。画像中の色は黒線で区切られており、その区切りごとに色を変更したいと考えています。イメージ的には山の標高(例えば100mごと)ごとに色が区切られているものを、こちらが任意でその色を並び替えるというイメージです。私としては単色では無い画素値を、例えばBGR形式で(100~105,0,150)という様な形で表現して、その画素値を変更したいと考えております。

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

先述の様に画素値(0,255,0)といった他の色が混ざっていない単色であれば色変更が可能なのですが、私が扱っている画像は例えばBGRのBが100~105といった1つの値だけでは表現できない色となっております。なので画像の色を変更する事が出来ません。エラーメッセージは出ず、結果も出力されるのですが間違った画像が出力されます(色変更が出来ていないという事です)。問題としては私が変更したい色が単色では無い為にその色が認識されず、結果上手く変更されないということです。

該当のソースコード

Python

1import sys,cv2 2import numpy as np 3 4args = sys.argv 5img = cv2.imread("sample.jpg") 6 7cond_p = (img[..., 0] == 150) & (img[..., 1] == 150) & (img[..., 2] == 150) 8cond_f = np.logical_not(cond_p) 9img[cond_p] = [0, 255, 0] 10img[cond_f] = [255, 0, 0] 11 12cv2.imwrite("a.jpg", img)

試したこと

上記のソースコードにおいて7行目で変更したい画素値を指定します。上の例であれば(150,150,150)の単色となっております。それを150の所を145~155、145~155、145-155の3通りを試しました。しかし2つ目の例では全角が含まれるのでエラーになり、その他の例でも上手くいきませんでした。

補足情報(FW/ツールのバージョンなど)

言語:Python
環境:Windows10
ブラウザ:Google chrome(Google Colaboratory)
*ノートパソコンです。全て最新バージョンです。プログラミング中はcolab以外のタブ、アプリは開いていません。

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

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

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

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

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

guest

回答3

0

img = cv2.imread("sample.jpg")

OpenCV使ってるなら,inRange でマスク作ればいいんじゃない?

投稿2021/09/03 10:21

fana

総合スコア11658

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

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

0

ベストアンサー

数値が範囲に入るかどうかの判定に、「範囲とイコール」を確認するという考えではだめです。

「python 以上 以下」などで検索すると出てきますが、

145 <= img[..., 0] <= 155```

のように表現します、「<=」の代りに「<」を使えばその値を含まないようにできます。

投稿2021/09/01 02:45

TakaiY

総合スコア12765

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

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

Vamosj1VIVA

2021/09/02 23:01

回答ありがとうございます。言われてみればそのやり方には納得出来ました。そのネット検索もしてみましたが、どのサイトも貴方のおっしゃる通りでした。しかしその通りプログラミングしてみたのですが、 「 'NoneType' object is not subscriptable」と変更した箇所にエラーが出ました。どの様にすればよろしいでしょうか。重ね重ね申し訳ございません。
TakaiY

2021/09/11 10:23

遅い応答になりましたが、回答します。 NoneType' object is not subscriptableのエラーが出たときのコードとエラーメッセージを見せていただかないとわからないのですが、そのコードの書き方がまずくて、imgの中身がNoneになってしまっていたのではないかと思います。 別回答の解決さくを見るかぎり、3つつなげる方法は使えるはずでず。
guest

0

ベストアンサーの方の考え方は正しかったのですが、それでは正常に動作しなかったので以下の様に修正しました。

Python

1cond_p = ((145 <= img[..., 0]) & (img[..., 0] <= 150) 2 & (145 <= img[..., 1]) & (img[..., 1] <= 150) 3 & (145 <= img[..., 2]) & (img[..., 2] <= 150))

投稿2021/09/11 06:52

Vamosj1VIVA

総合スコア3

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問