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

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

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

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

Python

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

Q&A

解決済

1回答

1458閲覧

opencv色付きの線を描画したい

koichi_

総合スコア20

OpenCV

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

Python

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

0グッド

0クリップ

投稿2018/12/05 16:46

編集2018/12/05 23:37

前提・実現したいこと

pythonのopencvで色付きの線を書きたいです
直接値を入れるとうまくいくのですが、ほかの画像から読み取った値を代入しようと線が表示されません。

cv2.rectangleを使用したいと考えています。やり方をご教授お願いします。

修正
2018/12/06 指摘されたmy_colorのprint文とログを追記しました。

該当のソースコード

python

1def paint_block_on_result_canvas(img, y, x): 2 my_color = (int(img[y][x][0]), int(img[y][x][1]), int(img[y][x][2])) 3 4 # 認識結果のウインドウ 5 h, w, c = img.shape 6 img = np.ones((h, w, 3))*255 7 8 # -----------ご指摘のprint文、を挿入しました----------- 9 print('paint_block_on_result_canvas: my_color={}'.format(my_color)) 10 11 cv2.rectangle(img, (150, 25), (300, 50), my_color, -1) 12 # cv2.rectangle(img, (150, 25), (300, 50), (0, 0, 255), -1) # これだとうまくいく 13 14 cv2.imshow("result_img", img) 15

ログ

ご指摘のmy_colorのprintを追加しました。

Connected to pydev debugger (build 183.4284.139)
mouse_call_back_test: img.shape=(589, 960, 3)
-------click event start-------
print_position: (x,y)=(157, 238)
print_position: gbr:[188 146 101]
paint_block_on_result_canvas: my_color=(188, 146, 101)
-------click event end-------
-------click event start-------
print_position: (x,y)=(343, 384)
print_position: gbr:[105 77 47]
paint_block_on_result_canvas: my_color=(105, 77, 47)
-------click event end-------
-------click event start-------
print_position: (x,y)=(400, 262)
print_position: gbr:[46 33 19]
paint_block_on_result_canvas: my_color=(46, 33, 19)
-------click event end-------

補足:全ソース

python

1import cv2 2import numpy as np 3 4 5def paint_block_on_result_canvas(img, y, x): 6 my_color = (int(img[y][x][0]), int(img[y][x][1]), int(img[y][x][2])) 7 8 # 認識結果のウインドウ 9 h, w, c = img.shape 10 img = np.ones((h, w, 3))*255 11 12 # -----------ご指摘のprint文、を挿入しました----------- 13 print('paint_block_on_result_canvas: my_color={}'.format(my_color)) 14 15 cv2.rectangle(img, (150, 25), (300, 50), my_color, -1) 16 # cv2.rectangle(img, (150, 25), (300, 50), (0, 0, 255), -1) # これだとうまくいく 17 18 cv2.imshow("result_img", img) 19 20 21def print_position(event, x, y, flags, img): 22 if event == cv2.EVENT_LBUTTONDBLCLK: 23 print('-------click event start-------') 24 print('print_position: (x,y)=({x}, {y})'.format(x=x, y=y)) 25 print('print_position: gbr:{gbr_value}'.format(gbr_value=(img[y][x]))) 26 27 paint_block_on_result_canvas(img, y, x) 28 print('-------click event end-------') 29 30 31def mouse_call_back_test(): 32 img = cv2.imread("data/src/Berry.jpg") 33 34 print('mouse_call_back_test: img.shape={}'.format(img.shape)) 35 cv2.imshow("img", img) 36 cv2.setMouseCallback("img", print_position, img) 37 cv2.waitKey(0) 38 cv2.destroyAllWindows() 39 40 41def main(): 42 mouse_call_back_test() 43 44 45if __name__ == '__main__': 46 main() 47

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

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

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

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

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

can110

2018/12/05 16:55

print(my_color)した結果を追記ください。
guest

回答1

0

ベストアンサー

img = np.ones((h, w, 3))*255だとデータ型はfloat64になってしまい正しく画像データとして扱えません。
img = np.ones((h, w, 3),dtype=np.uint8)*255と型指定することで正常に動作するようになります。

投稿2018/12/06 00:29

can110

総合スコア38256

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問