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

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

詳細はこちら
Python 3.x

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

Q&A

解決済

3回答

3152閲覧

SyntaxError: invalid syntaxと出力されたエラーが解決できない

GuMasi

総合スコア73

Python 3.x

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

0グッド

0クリップ

投稿2021/02/11 23:02

編集2021/02/12 01:44

下記のコードを実行しましたところSyntaxError: invalid syntaxと出力されてしまい解決できません。

python3

1import cv2 2 3img = cv2 . imread ( "person.jpg" ) 4 5cv2 . imshow("window",img ) 6 7cv2 . waitKey () 8cv2 . destroyAllWindows() 9 10cv2 . imwrite ( "person",img) 11 12 13%matplotlib inline 14import cv2 15import matplotlib . pyplot as plt 16 17 18img = cv2 . imread ( ‘ファイル名 . jpg’ ) 19# 高さ 20height = img . shape [ 0 ] 21# 幅 22width = img . shape [ 1 ] 23# 高さ・幅を150pixelずつ取り除く 24trim _ img = img [ 150 : height , 150 : width ] 25#matplotlibで表示する場合はRGBからBGRに変換 26trim _ img = cv2 . cvtColor ( trim _ img , cv2 . COLOR _ RGB2BGR ) 27plt . imshow ( trim _ img ) 28 29

イメージ説明

修正点:

%matplotlib inlineをコメントアウト、plt.show()を最後の行に追加

python3

1import cv2 2 3img = cv2 . imread ( "person.jpg" ) 4 5cv2 . imshow("window",img ) 6 7cv2 . waitKey () 8cv2 . destroyAllWindows() 9 10cv2 . imwrite ( "person",img) 11 12 13#%matplotlib inline 14import cv2 15import matplotlib . pyplot as plt 16 17 18img = cv2 . imread ("person",img) 19# 高さ 20height = img . shape [ 0 ] 21# 幅 22width = img . shape [ 1 ] 23# 高さ・幅を150pixelずつ取り除く 24trim _ img = img [ 150 : height , 150 : width ] 25#matplotlibで表示する場合はRGBからBGRに変換 26trim _ img = cv2 . cvtColor ( trim _ img , cv2 . COLOR _ RGB2BGR ) 27plt . imshow ( trim _ img ) 28 29plt.show()

実行結果
イメージ説明

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
_を.に書き換え実行した結果

python3

1 2import cv2 3 4img = cv2 . imread ( "person.jpg" ) 5 6cv2 . imshow("window",img ) 7 8cv2 . waitKey () 9cv2 . destroyAllWindows() 10 11cv2 . imwrite ( "person",img) 12 13 14#%matplotlib inline 15import cv2 16import matplotlib . pyplot as plt 17 18 19img = cv2 . imread ("person",img) 20# 高さ 21height = img . shape [ 0 ] 22# 幅 23width = img . shape [ 1 ] 24# 高さ・幅を150pixelずつ取り除く 25trim.img = img [ 150 : height , 150 : width ] 26#matplotlibで表示する場合はRGBからBGRに変換 27trim.img = cv2.cvtColor (trim.img , cv2.COLOR.RGB2BGR) 28plt . imshow (trim.img) 29 30plt.show() 31```出力結果 32![イメージ説明](4263251893a94686f2c1b95672e56bd0.png)

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

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

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

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

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

guest

回答3

0

ベストアンサー

それは、Jupyter Notebookで使える書き方で、
python *.py
で実行する場合には使えないので、その行を削除するかコメント化するかしてください

参考
Jupyter Notebookの基本操作を学ぶ

投稿2021/02/11 23:34

編集2021/02/11 23:38
jbpb0

総合スコア7653

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

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

jbpb0

2021/02/11 23:39

その代わりに、コードの最後に plt.show() を追加してください
GuMasi

2021/02/11 23:54

回答くださりありがとうございます。 %matplotlib inlineをコメントアウトしplt.show()を追加しましたのですが、24行目に(trim _ img = img [ 150 : height , 150 : width ])SyntaxError: invalid syntaxというエラーが出力されてしまいます。
jbpb0

2021/02/12 00:57

コード中の全ての「_」の両側のスペースを削除してください trim _ img ↓ trim_img cv2 . COLOR _ RGB2BGR ↓ cv2 . COLOR_RGB2BGR
jbpb0

2021/02/12 01:11 編集

スペース(空白文字)を多用されてますけど、一応Pythonでのスペースの推奨される使い方というものがあります 絶対守らないといけないというものではないし、文法エラーにならないなら別にそう書いても誤りではないのですが 参考 https://www.atmarkit.co.jp/ait/articles/1912/10/news045.html https://qiita.com/simonritchie/items/bb06a7521ae6560738a7 【追記】 上記は、文法エラーになるところは全部直した上で、それ以外のスペースに関する話です
GuMasi

2021/02/12 01:27

ありがとうございます。 スペースを削除しましたら上手くいったようです。 >スペース(空白文字)を多用されてますけど、一応Pythonでのスペースの推奨される使い方というものがあります 見やすくするための書き方という点からみて推奨されてない書き方だと見にくくなってしまうということなのですね。
jbpb0

2021/02/12 09:25

下記もエラーになるので、直す必要があります (ファイル名は、既存ファイルが上書きされないように変えました) cv2 . imwrite ( "person",img) ↓ cv2 . imwrite ( "person2.jpg",img) img = cv2 . imread ("person",img) ↓ img = cv2 . imread ("person2.jpg")
GuMasi

2021/02/13 06:13

ありがとうございます、助かります。
guest

0

どういう環境で実行していますか?

jupyterの場合には、%matplotlib inlineが必要ですが、そうでない環境では不要であり、文法エラーです。

投稿2021/02/11 23:28

ppaul

総合スコア24670

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

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

GuMasi

2021/02/11 23:41

回答いただきありがとうございます。 環境はエディタは:Visual Studio Code、:OS Mac、pythonバージョン:3.9.1になります。 >jupyterの場合には、%matplotlib inlineが必要ですが、そうでない環境では不要であり、文法エラーで す。 私の不勉強で恐縮なのですが、jupyterはエディタという認識で合ってますでしょうか?
ppaul

2021/02/12 00:11 編集

https://ja.wikipedia.org/wiki/Project_Jupyter にいろいろ書いてありますが、わかりにくいですね。 プログラムを編集して、そこから実行してというエディタや事項機能をまとめたものを統合開発環境(IDE)といいます。jupyterは、IDEをさらに拡張したものだと思ってください。 便利な機能を追加していますが、そのために今回のような誤解を引き起こすこともあるので、私は使いません。 Jupyterに限らず、拡張機能を持った処理系で開発したアプリは他の処理系に持って行くと動作しなくなりますので、複数の処理系で動かしたい場合は、拡張機能のない処理系で開発することをお勧めします。 その意味では、VSもお勧めしません。
GuMasi

2021/02/12 00:09

ありがとうございます。 理解を深めることができました。 他の方の回答にもエラーの出力について質問させていただいているのですがまだエラーが解決できていなく引き続きお願いできますと助かります。
guest

0

%matplotlib inline

この行の記述が、pythonのコードとして解釈できない、というエラーです。
で、これはいったいなにをしてるんでしょうか。

投稿2021/02/11 23:11

y_waiwai

総合スコア88040

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

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

GuMasi

2021/02/11 23:30

回答いただきありがとうございます。 OpenCVを用いて画像処理を学んでいる途中経過のコードになります。 >この行の記述が、pythonのコードとして解釈できない、というエラーです。 そうなのですね。 解決策としてはどのようなことが考えられるのでしょうか。
y_waiwai

2021/02/11 23:42

すでに他回答がついてますね その行を削除するかコメントアウトしましょう
GuMasi

2021/02/12 00:10

ありがとうございます。 コメントアウトして再度実行しましたのですが、上手くいきません。
y_waiwai

2021/02/12 00:29

その行のエラーが解消されたので、他のエラーが出てきたんですね _ じゃなくて . ではないですかね #他の場所も同じ
y_waiwai

2021/02/12 00:47

trim_imgという名前の変数かな? 変数名なら、スペース入れちゃダメです
GuMasi

2021/02/12 01:02

-を.に変更しましたらエラーが解消され画像が開きましたが、-ではなく.でエラーが解消されたのはどのようなことなのでしょうか? >trim_imgという名前の変数かな? はい。スペースを入れると動作になにか問題が起きるのでしょうか。
y_waiwai

2021/02/12 01:17

. (ピリオド)、ってのは一種の演算子みたいなものなので、その前後にスペース入れるってのでも構いませんが、trim_imgという名前の変数なのであれば、その間にスペース入れるというのは許されません
jbpb0

2021/02/12 01:29

質問者さん > -を.に変更しましたらエラーが解消され画像が開きました 話の流れから、「-を.に変更」ではなく「_を.に変更」にしたのだと思いますが、本当にそれでエラーになりませんでしたか? 手元の環境で 「trim _ img」→「trim . img」 と書き換えて実行しても、エラーになりました
GuMasi

2021/02/12 01:45

y_waiwaiさん 教えてくださりありがとうございます。
GuMasi

2021/02/12 01:51

bpb0さん >話の流れから、「-を.に変更」ではなく「_を.に変更」にしたのだと思いますが、本当にそれでエラーになりませんでしたか? はい、私の環境ではエラーは出力されなかったようなのですが... 上記の質問編集欄にて、_を.に変更し実行した結果を記載いたしましたので誤りがあればご指摘お願いいたします。
jbpb0

2021/02/12 05:55 編集

> _を.に変更し実行した結果を記載 のコードの img = cv2 . imread ( "person.jpg" ) のファイル名だけ変えて、他はそのままで実行しましたけど、 cv2 . imshow("window",img ) で一つ目の表示が出た後、何かキー入力をして次に進んだら、エラー出まくりました cv2 . imwrite ( "person",img) cv2.error: OpenCV(4.5.1) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-r2ue8w6k\opencv\modules\imgcodecs\src\loadsave.cpp:682: error: (-2:Unspecified error) could not find a writer for the specified extension in function 'cv::imwrite_' ファイル名に拡張子を付けてないエラーが出るので修正 ↓ cv2 . imwrite ( "person2.jpg",img) それに伴い、下記もファイル名に拡張子を付ける img = cv2 . imread ("person",img) ↓ img = cv2 . imread ("person2.jpg",img) さらに、エラーが出るのでファイル名の次の「img」を削除 ↓ img = cv2 . imread ("person2.jpg") trim.img = img [ 150 : height , 150 : width ] NameError: name 'trim' is not defined 「.」だとエラーになるので、「_」に戻す ↓ trim_img = img [ 150 : height , 150 : width ] 他の行も同様に直す trim.img = cv2.cvtColor (trim.img , cv2.COLOR.RGB2BGR) plt . imshow (trim.img) ↓ trim_img = cv2.cvtColor (trim_img , cv2.COLOR.RGB2BGR) plt . imshow (trim_img) trim_img = cv2.cvtColor (trim_img , cv2.COLOR.RGB2BGR) AttributeError: module 'cv2.cv2' has no attribute 'COLOR' 「.」だとエラーになるので、「_」に戻す ↓ trim_img = cv2.cvtColor (trim_img , cv2.COLOR_RGB2BGR) これだけやらないと、エラーが出ずに最後まで行きませんでした 【追記】 Windows, Macどちらでも、上記の修正が全部必要でした
jbpb0

2021/02/12 03:28 編集

アップされた「出力結果」画像の右の方に「window」と表示されてるのがありますけど、そこに読み込まれた「person.jpg」が表示されてると思います それは、コードの cv2 . imshow("window",img ) で一つ目の表示がされてるところで止まっている状態です さらにコードには続きがあり、「_」を「.」に変更したところは続きの中ですよね 「window」のどこかをクリックしてから何かキー入力したら、「window」が閉じて、コードの次に進みます そうしたらエラーが出るはずです ご確認ください 【追記】 訂正します cv2 . imshow("window",img ) で一つ目の表示がされてるところで止まっている状態です ↓ cv2 . waitKey () でキー入力を待っている状態です
GuMasi

2021/02/12 08:54

色々検証してくださりありがとうございます。 >cv2 . imshow("window",img ) で一つ目の表示がされてるところで止まっている状態です さらにコードには続きがあり、「_」を「.」に変更したところは続きの中ですよね 止まっている状態だったのですね。 そうだと思います。 >「window」のどこかをクリックしてから何かキー入力したら、「window」が閉じて、コードの次に進みます そうしたらエラーが出るはずです jbpb0さんのおっしゃる通りwindowをキーで閉じましたら下記のようにエラーが出力されました。 私windowが開けば正常に動作しているのかと思っていました。 申し訳ございません。 [windowを閉じた後の出力結果] Traceback (most recent call last): File "/Users/kabu1/Documents/python-izm/画像認識.py", line 10, in <module> cv2 . imwrite ( "person",img) cv2.error: OpenCV(4.5.1) /private/var/folders/nz/vv4_9tw56nv9k3tkvyszvwg80000gn/T/pip-req-build-yaf6rry6/opencv/modules/imgcodecs/src/loadsave.cpp:682: error: (-2:Unspecified error) could not find a writer for the specified extension in function 'imwrite_'
jbpb0

2021/02/12 09:10

> 私windowが開けば正常に動作しているのかと思っていました。 ご自身がお書きになったコードを読み返してください 画像を表示するところが2回ありますよね cv2 . imshow("window",img ) が1回目で、 plt . imshow (trim.img) が2回目 ですから、正常に動作というのは、エラーが出ずに2回目の画像表示までいく、ということですよね エラーメッセージを読みながら、どうすればエラーが直るか調べて考えながら、コードを修正してみてください 全てのエラーを退治するには、私が11:29に書いたコメントの修正項目を全部直すことになりますけど、カンニングしないで自分で調べて考えて直した方が、勉強になりますので、やってみてください
GuMasi

2021/02/13 06:12

webサイトにコードが記載していたものを写経したものなのであまり理解していないところがあり、勉強不足を痛感しております。 自習し修正しました結果2回目の画像が表示(質問欄の編集にて更新)されました。 エラーが出力した原因はファイル名に拡張子がなかったことやtrim_img=(変数)変数名に拡張子を付けたことによるエラーが出力されたという考えに至りましたのですがそのような認識で間違いでは無いでしょうか? またcv2がコードの記述に多くあるのですが、どのような意味になるのかやheight = img . shape [0]のshape [0]とはどのような意味なのでしょうか。 質問が多く恐縮ですがよろしくお願いいたします。
jbpb0

2021/02/13 07:00 編集

> trim_img=(変数)変数名に拡張子を付けた 拡張子というのが「trim.img」の「.img」のことなら、それは拡張子ではありません 「.」の意味は、下記を見てください http://pen.envr.tsukuba.ac.jp/~torarimon/?python%C6%FE%CC%E7%3A+%A5%AA%A5%D6%A5%B8%A5%A7%A5%AF%A5%C8%A4%C8%A4%CF それでも分からなければ、ここで聞く前に、まずはオブジェクト指向の勉強をしてください 【追記】 オブジェクト指向が理解できないとPythonのプログラムが全然書けない、というわけではないので、追々理解していけばいいと思います ただ、Pythonでは「.」は特別な意味があるので、意味が分からないのに安易に使ってはいけない、ということだけ覚えておいてください
jbpb0

2021/02/13 07:08

> cv2がコードの記述に多くあるのですが、どのような意味 下記を見てください https://jellyware.jp/aicorex/contents/out_c04_opencv.html > shape [0]とはどのような意味 https://note.nkmk.me/python-numpy-ndarray-ndim-shape-size/ の「NumPy配列ndarrayの形状(各次元のサイズ): shape」を見てください どちらも、ググったら解説してるWebページが、上記以外にもいくつも見つかりますよね ここで聞く前に、まずは自分で調べて、それでも分からないところを聞いてください あと、元々の質問内容は解決したのだから、これ以上疑問があれば、それは別の質問にしてください
GuMasi

2021/02/14 05:39

>拡張子というのが「trim.img」の「.img」のことなら、それは拡張子ではありません 「.」の意味は、下記を見てください オブジェクト(物)の中のデータや操作使えるようにするために.をつけるのですね。 今後jbpb0さんなどにご教示いただきましたの糧にして頑張ります。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問