OpenCVのチャンネルエラー対処: (-215:Assertion failed) (mtype == CV_8U || mtype == CV_8S) && _mask.sameSize(*psrc1) in function 'binary_op'

2018-11-25
python%E7%94%BB%E5%83%8F%E5%87%A6%E7%90%86opencv
    

目次

概要

Python + OpenCVのスクリプトを書いていたところ、タイトルにあるようなエラーが出現しました。 結果的にはnumpyの配列のサイズが異なるのが原因だったようです。

詳細

下記のソースはPythonで読み込んだ画像にマスクをかける処理です。

import cv2
import numpy as np

if __name__ == "__main__" :
    im = cv2.imread('img/lenna.png')

    height = im.shape[0]
    width = im.shape[1]

    im = cv2.resize(im, (width, height))

    contours = np.array(
        [
            [50,0],
            [65,40],
            [100, 40],
            [75, 60],
            [100,100],
            [50,80],
        ]
    )

    mask = np.tile(np.uint8([0,0,0]), (width, height, 1))
    cv2.fillConvexPoly(mask, points =contours, color=(255, 255, 255))

    img_masked = cv2.bitwise_and(im, im, mask=mask )

    cv2.imshow('result', img_masked)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

これを実行した時のエラーがこちら、

Traceback (most recent call last):
  File "main4.py", line 46, in <module>
    img_masked = cv2.bitwise_and(im, im, mask=mask )
cv2.error: OpenCV(3.4.3) /tmp/opencv-20181001-41572-id0soo/opencv-3.4.3/modules/core/src/arithm.cpp:241: error: (-215:Assertion failed) (mtype == CV_8U || mtype == CV_8S) && _mask.sameSize(*psrc1) in function 'binary_op'

エラーコードから、チャンネル数の違いによりエラーが発生しているのではないかと推測しました。

そして色々試した結果、 結果的には、mask画像が3チャンネルになっていたことが原因だとわかりました。 CV8UもしくはCV8Sで渡す必要があるようです。

なのでmask作成の箇所を以下のように書き換え、無事解決することができました。

mask = np.tile(np.uint8(0), (width, height, 1))

Mat型一覧について

https://tech-blog.s-yoshiki.com/2018/11/787/

参考

https://stackoverflow.com/questions/44019023/opencv-python-error-error-215-mtype-cv-8u-mtype-cv-8s-mask-s

https://teratail.com/questions/88341

    
s-yoshiki
s-yoshiki
githubtwitterqiita
Web作ってますが、インタラクティブなプログラミングも好きです。
JavaScript / Vue / node.js / PHP / AWS / OpenCV

関連記事

Selenium + Python でYahooのログインや検索・メールの操作を自動化する。
環境 Selenium環境の構築 Seleniumのインストール 検証 Yahoo検索する Yahooにログイン/ログアウトする Yahooメールの操作〜ゴミ箱を空にする サンプルソース 参考 Selenium + PythonでYahoo…

macOSにOpenCV4をインストール
パッケージの情報 インストール 試す with Python3 macOS (MacBook Pro 2018 13 inchi)にhomebrewを用いてOpenCVをインストールする方法。 パッケージの情報 まず、brew search と brew info…

エンジニアなMacBookのセットアップ 開発環境の構築
ブラウザ関連 Homebrewのインストール ターミナル環境系 Hyper エディタ VSCode typora CLIツール Git 言語系 Python node.js MacBookPro…

OpenCV.jsを動かしてみる + デモ
環境 OpenCV.jsのセットアップ サンプルソース グレースケール 2値化 Cannyエッジ 輪郭抽出 ガウシアン デモ OpenCV.jsを試してみました。 環境 OpenCV.js v4.1.0 OpenCV.jsのセットアップ OpenCVをWasm…

JavaScriptで画像のヒストグラムの正規化
サンプルソース 画像のヒストグラムを正規化するコードの紹介 サンプルソース

画像のヒストグラムを表示する Chart.js JavaScript canvas
ヒストグラム算出のサンプルコード インストール ヒストグラム表示クラス ヒストグラム算出 デモ 出力結果 参考 画像のヒストグラムをJavaScriptで算出してグラフとして表示してみます。 ヒストグラム算出のサンプルコード ヒストグラムの表示にChart.js…

画像のプーリング処理 canvas + JavaScript
プーリング処理について サンプルソース デモ 参考文献 JavaScriptで画像のプーリング処理を行ってみました。 プーリング処理について プーリングは畳み込みに似た処理で、CNN…

画像の減色処理 サンプルコードとデモ JavaScript + canvas
減色処理について デモ ソース 画像の減色処理を行ってみた。 サンプルコードとデモの紹介。 環境は JavaScript + Canvas。 減色処理について 通常、Canvas上での画像のRGBそれぞれの値は0〜255までの256^…

画像のHSV変換 JavaScript + canvas
デモ ソース 参考 画像のHSV変換を行うサンプルコードとデモの紹介 デモ 以下のリンクでデモを動かしています。 https://s-yoshiki.github.io/Gasyori100knockJS/#/questions/ans5 デモの内容はRGB…

大津の二値化で画像を2値化 JavaScript + canvas 【画像処理】
デモ サンプルソース 大津の2値化 大津の二値化で画像を2値化するサンプルコード https://tech-blog.s-yoshiki.com/2019/04/1115/ ↑のサンプルコードでは閾値を128として決め打ちで…

最新の投稿

GitHub Actions で Gatsby をビルドし Amazon S3 にデプロイする
GitHub Actions について あらかじめ準備しておくもの AWS IAM ユーザを環境変数にセットする workflowの記述 ビルド バッジを利用する 終わりに 参考にしたところ Gatsbyで作った静的サイトを、GitHub Actions…

cloudinaryによる画像ファイルの管理 はじめてみる
目的 cloudinary について 他のサービスとの比較 料金プラン アカウントの登録 利用してみる ダッシュボード 画像の編集 APIベースでのアクセス 感想 参考 画像の管理や配信、さらには加工といった事ができるsaas型のcloud…

JavaScriptによる2分探索(バイナリサーチ) のサンプルコード
2分探索について ソース 参考 JavaScriptで2分探索(バイナリサーチ)を実装してみました。…

Vue.jsで作成された、ちょっと面白くて役立ちそうなサービス
UIコンポーネント VueSocial CKEditor 5 Vue.Draggable Vuetable 2 vuejs-datepicker Kalendar Vue Apexcharts Vue.js Google Charts vue-cart WebIDE…

GitHubのリポジトリをGitLabに同期する GitLabのミラーリング機能
GitLabのミラーリングについて GitHubのリポジトリをGitLabに反映する その他 参考 GitLabのミラーリング機能によりGitHubなどの外部のリポジトリとのミラーリングを行うことができます。 これを使ってGitHub…

WordPressやめます Gatsbyに移行しました
これまでのWordPress運用 なぜWordPressを捨てるのか? なぜGatsbyを利用するのか? gatsbyについて WordPressから記事の救出 移行対象記事の抽出 記事の置換 Gatsbyテーマの作成 Gatsby…

WordPressのDBから記事データを抽出する
WordPressのDB関連図 公開記事一覧の取得 タグ・カテゴリの取得 サムネイルの取得 おまけ: PHPスクリプト化しました 参考にしたところ WordPressにため込んだデータMarkdown化しGatsby…

ハイフンとかマイナスとかダッシュとか

Firebase + Nuxt で認証付きページを作るときに参考にしたいところ
Webアプリケーションのセッション管理にJWT導入を検討する際の考え方 Service Worker によるセッション管理 ユーザー セッションの管理 Nuxt.jsとFirebaseでSPA×SSR×PWA×サーバーレスを実現する CookieとセッションとJWT SSR…

GolangをCGIとして実行する
環境 golang パッケージ ソースと実行 ビルドとサーバ実行 標準ライブラリのみ Golang を CGIとして実行する際のメモ 環境 golang パッケージ 以下のモジュールを利用しています。 github.com/gorilla/mux…

Tags

Dates

© 2020   404 motivation not found