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

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

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

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

Python 3.x

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

Q&A

解決済

2回答

3581閲覧

画像⇔文字列 変換時のエラー

suhsuu

総合スコア15

OpenCV

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

Python 3.x

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

0グッド

0クリップ

投稿2018/08/17 05:59

前提・実現したいこと

画像をシリアル通信で転送するコードの作成を目指し、
まずは保存されている画像(smile_img.jpg)を、一度、文字列に変換したのち、再び画像に変換するコードを作りました。

しかし、下記に示すようなエラーが発生し、
「decoded_image」(= dec_img)が表示されません。
原因がわからず困っています。

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

以下の2つのエラーメッセージが出ます。 1. WARNING **: Error retrieving accessibility bus address: org.freedesktop.DBus.Error.ServiceUnknown: The name org.a11y.Bus was not provided by any .service files 2. cv2.error: OpenCV(3.4.1) /home/pi/opencv-3.4.1/modules/highgui/src/window.cpp:356: error: (-215) size.width>0 && size.height>0 in function imshow

該当のソースコード

Opencv3.4.1 Python3.5.3

1# -*- coding: utf-8 -*- 2 3import numpy as np 4import cv2 5 6img = cv2.imread("../images/smile_img.jpg", 0) 7 8img_string = img.tobytes() 9 10img_array = np.fromstring(img_string,dtype ='uint8') #バイトデータ→ndarray変換 11img_array = np.reshape(img_array,(105, 105)) 12 13dec_img = cv2.imdecode(img_array, 0) 14cv2.imshow("decoded_image", dec_img) 15cv2.waitKey()

試したこと

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

画像(smile_img.jpg)は、105×105ピクセル グレースケール です。
Opencv3.4.1 Python3.5.3

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

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

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

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

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

guest

回答2

0

自己解決

エラーが発生した後半部分をPILを使って実行することで
当初目的を達成しました。
ただし、もとのエラー発生の原因はわかっていません。

# -*- coding: utf-8 -*- import numpy as np import cv2 from PIL import Image #変更点1 img = cv2.imread("../images/smile_img.jpg", 0) #cv2.imreadで画像ファイルを開いてnumpy.ndarrayを取得 img_string = img.tobytes() img_array = np.fromstring(img_string,dtype ='uint8') #バイトデータ→ndarray変換 img_array = np.reshape(img_array,(105, 105)) #dec_img = cv2.imdecode(img_array, 0) pil_img = Image.fromarray(img_array) #変更点2 #cv2.imshow("decoded_image", dec_img) pil_img.show() #変更点3 pil_img.save("../images/decoded_img.jpg")

投稿2018/08/18 00:43

suhsuu

総合スコア15

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

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

0

エラーメッセージ ”error: (-215) size.width>0 && size.height>0 in function imshow”
は、関数 imshow において、'size.width>0 && size.height>0' (幅も高さも0より大きいこと!)というアサーションが成り立たなかった事を示しています。

dec_img = cv2.imdecode(img_array, 0)

のすぐ下に、以下のコードを挿入してdec_imgの大きさを確認してみてください。
幅か高さのいずれか(もしくは両方)が0だと思います。

print (doc_image.shape)

グレースケール画像(2次元配列)になるつもりの変数の.shapeがどうなっているかをコードの下から調べていけば、問題の発生場所が判ると思います。

投稿2018/08/17 07:33

coco_bauer

総合スコア6915

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

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

suhsuu

2018/08/17 08:15

print(img_array.shape)の結果は(105, 105)なので、ここまでは想定通り。 頂いたアドバイス通り、 print (dec_img.shape)を実行すると、以下のエラーが発生します。 AttributeError: 'NoneType' object has no attribute 'shape'
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問