

Mask-RCNNを実装中にこのようなエラーが表示されました。  
拙い文章ですが回答よろしくお願いします。

**エラーメッセージ:**

[code]

    cv2.error: OpenCV(4.5.2) error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'
    
[/code]

**エラーメッセージの指す箇所:**

[code]

    image = cv2.imread("images/image.jpg")
    image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    image = imutils.resize(image, width=512)
    
[/code]

**実行環境:**

tensorflow:1.14.0  
tensorflow-gpu:1.14.0  
keras:2.1.5  
opencv-python:4.5.2.52


CC BY-SA 4.0
2021-06-03T17:32:41.333
76315
2022-07-24T14:04:15.343
2021-06-04T00:33:50.900
3060
45648
question
python python3 opencv anaconda
cv2.error: OpenCV(4.5.2) error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'


単純に`imread()`での画像の読み込みに失敗していて、`cvtColor()`の第1引数`src`に空のマトリックスが渡されているんじゃないですか？  
OpenCVの`imread()`は、失敗すると空のマトリックスを返します（なぜ例外をスローしないのか、理解に苦しむ仕様ですが）。

  * [OpenCV: Color Space Conversions](https://docs.opencv.org/4.5.2/d8/d01/group__imgproc__color__conversions.html#ga397ae87e1288a81d2363b61574eb8cab)
  * [OpenCV: Image file reading and writing](https://docs.opencv.org/4.5.2/d4/da8/group__imgcodecs.html#ga288b8b3da0892bd651fce07b3bbd3a56)

こういった問題は、たいてい他の人も遭遇していて、エラーメッセージの全文または一部をGoogle検索にかけるとすぐに対策が見つかることが多いので、まずは検索してみることを推奨します。

  * [python - OpenCV !_src.empty() in function 'cvtColor' error - Stack Overflow](https://stackoverflow.com/questions/52676020/opencv-src-empty-in-function-cvtcolor-error)
  * [Python - cvtColorのエラー!_src.empty() in function 'cv::cvtColor'｜teratail](https://teratail.com/questions/294741)
  * [python - python3.6.6にてcv2エラーが発生します - スタック・オーバーフロー](https://ja.stackoverflow.com/questions/49260/)
  * [python - Python2.7.6でOpenCV Errorが発生します - スタック・オーバーフロー](https://ja.stackoverflow.com/questions/30107/)

しかし、そもそも今回のアサーションエラーに関してはわざわざ検索するまでもなく、落ち着いてエラーメッセージを読んでAPIリファレンスと照らし合わせたり、デバッガーや`print()`関数などで変数の内容を追ったりすれば、簡単に原因の目星がつく問題のはずです。

**アサーション** ( **assertion** )
というのは、事前条件や事後条件など、本来プログラムの実行中に満たされていなければならない（真でなければならない）条件式を記述しておき、それが偽になった場合はロジックに誤り（バグ）がある状態とみなしてプログラムを強制停止する、という仕組みです。

プログラミング言語や開発環境によっては、エラーメッセージはご丁寧に日本語にローカライズされていることもありますが、ほとんどは英語です。英語が読めないのであればプログラミング以前の問題であり、まず英語を学習してください。技術文書で使用される英語は平易な構文がほとんどで、最低限高校レベルの英語力があれば大抵なんとかなります。分からない単語はWeb検索で調べれば十分です。機械翻訳もありますが、英語から日本語への翻訳はまだまだ精度が低く、頓珍漢な翻訳をすることが多いのでお勧めしません。

  * [エラーメッセージの読み方と対処, 検索や質問の原則 - Qiita](https://qiita.com/cannorin/items/eb062aae88bfe2ad6fe5#google-%E6%A4%9C%E7%B4%A2%E3%81%AE%E5%A4%A7%E5%8E%9F%E5%89%87)
  * [ペアプログラミングして気がついた新人プログラマの成長を阻害する悪習 - Qiita](https://qiita.com/hirokidaichi/items/27c757d92b6915e8ecf7#%E3%82%A8%E3%83%A9%E3%83%BC%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%83%AD%E3%82%B0%E3%82%92%E8%AA%AD%E3%81%BE%E3%81%AA%E3%81%84)
  * [プログラミング言語 - エラー文って読まないの？｜teratail](https://teratail.com/questions/76445)


CC BY-SA 4.0
2021-06-05T08:52:47.883
77351
2021-06-05T08:52:47.883
15413
76315
answer