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

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

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

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

OpenCV

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

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

Q&A

解決済

1回答

1261閲覧

Python OpenCV matplotlib.pyplot  画像認識 モザイク エラーの解決方法

lovely

総合スコア28

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

OpenCV

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

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

0グッド

0クリップ

投稿2021/09/09 11:39

編集2021/09/09 12:09

下記のコードで出るエラーが解決できません。

python

1import cv2 2 3def mosaic(img,rect,size): 4 (x1,y1,x2,y2)=rect 5 w=x2-x1 6 h=y2-y1 7 i_rect=img[y1:y2,x1:x2] 8 i_small=cv2.resize(i_rect,(size,size)) 9 i_big=cv2.resize(i_small,(w,h),interpolation=cv2.INTER_AREA) 10 img2=img.copy() 11 return img2 12 13import matplotlib.pyplot as plp 14 15img=cv2.imread("itzy-yunaa.jpg") 16mos=mosaic(img,(2585,2585,1885,1885),10) 17cv2.imwrite("itzy--yuna.lpg",mos) 18plp.imshow(cv2.cvtColor(mos,cv2.COLOR_BGR2RGB)) 19plt.show()

エラー
Traceback (most recent call last):
File "c:\Users\c7not\OneDrive\デスクトップ\python_lesson\YouTube\secound.py", line 16, in
<module>
mos=mosaic(img,(2585,2585,1885,1885),10)
File "c:\Users\c7not\OneDrive\デスクトップ\python_lesson\YouTube\secound.py", line 8, in mosaic
i_small=cv2.resize(i_rect,(size,size))
cv2.error: OpenCV(4.5.3) C:\Users\runneradmin\AppData\Local\Temp\pip-req-build-1i5nllza\opencv\modules\imgproc\src\resize.cpp:4051: error: (-215:Assertion failed) !ssize.empty() in function 'cv::resize'

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

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

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

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

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

guest

回答1

0

ベストアンサー

2か所ほど誤りがあるようです。

■ 1つ目

mosaic 関数の第2引数で rect を渡していますが、パラメータの指定方法が誤っているようです。
rect は (x1,y1,x2,y2) を渡す必要があります。x1,y1が開始座標、x2,y2が終了座標である為、サイズの指定に誤りがあると考えられます。

python

1mos=mosaic(img,(2585,2585,1885,1885),10)

■ 2つ目
下記の強調した部分の処理が抜けているようです。

python

1import cv2 2import matplotlib.pyplot as plp 3 4def mosaic(img,rect,size): 5 (x1,y1,x2,y2)=rect 6 w=x2-x1 7 h=y2-y1 8 i_rect=img[y1:y2,x1:x2] 9 i_small=cv2.resize(i_rect,(size,size)) 10 i_big=cv2.resize(i_small,(w,h),interpolation=cv2.INTER_AREA) 11 img2=img.copy() 12 ################################# 13 img2[y1:y2, x1:x2] = i_big 14 ################################# 15 return img2 16 17img=cv2.imread("duck.jpg") 18# (100,100,300,200) … x1,y1,x2,y2 19mos=mosaic(img,(100,100,300,200),10) 20cv2.imwrite("result.jpg",mos) 21plp.imshow(cv2.cvtColor(mos,cv2.COLOR_BGR2RGB)) 22plp.show()

■ 実行結果
赤枠の部分にモザイクが入っていることが確認できます。(赤枠自体はPythonではなく手で追加したものです。)
実行結果

<参考情報>
下記サイトにモザイク処理のサンプルがありました。
処理にコメントが入っているので、こちらを参照すると理解が深まるのでは、と思います。

■ 【Python】画像にモザイクをかける
https://ymgsapo.com/2018/11/01/mosaic-image/

投稿2021/09/09 15:23

cx20

総合スコア4633

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

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

lovely

2021/09/10 10:45

ご回答ありがとうございます。 二つ目のコードはどういう意味でしょうか??
cx20

2021/09/10 12:34

> img2[y1:y2, x1:x2] = i_big i_big は、モザイク処理をした画像に相当します。 img2[y1:y2, x1:x2] は、赤枠に相当するエリアになります。 モザイク結果を、赤枠の部分に貼り付けているイメージになります。 > img=cv2.imread("duck.jpg") > # (100,100,300,200) … x1,y1,x2,y2 > mos=mosaic(img,(100,100,300,200),10) > cv2.imwrite("result.jpg",mos) ここのコードは、ローカルでテストする際に使った画像データに合わせて、パラメータ調整をしたものになります。 テストに使用したアヒルの画像は512x512の画像データで、モザイク対象は赤枠の部分を (100,100,300,200) とすることで、 (100,100)~(300,200) の範囲にモザイクをかけています。 詳細は下記サイトを参照ください。同様のサンプルが記載されています。 ■ 【Python】画像にモザイクをかける https://ymgsapo.com/2018/11/01/mosaic-image/ > # 元の画像へモザイク画像をコピー > img2 = img.copy() > img2[y1:y2, x1:x2] = zoom
lovely

2021/09/12 01:48

ありがとうございます。 どうして渡すときに[x1,y1,x2,y2]の形ではなく:を使っている形なのですか?
cx20

2021/09/12 03:12

> どうして渡すときに[x1,y1,x2,y2]の形ではなく:を使っている形なのですか? Python の構文にそれほど詳しい分けではありませんが「:」は「スライス」と呼ばれる書き方のようです。 配列に対して「始点のインデックス番号 : 終点のインデックス番号」といった形でアクセスすることが出来ます。 指定範囲の配列にアクセスする為にそのような記述になっているようです。 ■ Pythonのスライス https://qiita.com/kaeruair/items/e7f1c08915839ce3c9b4 img2 は ndarray と呼ばれる N次元配列になっており、今回のケースでは3次元配列 [x][y][rgb] になっています。 以下は、 試しに img2 の内容を print してみた結果です。2x2の4ピクセルの範囲を出力しています。 ```python print(type(img2)) print(img2[100:102, 100:102]) ``` 指定範囲の色情報が取得できることが確認できます。 ``` <class 'numpy.ndarray'> [[[26 32 27] [26 32 27]] [[26 32 27] [26 32 27]]] ``` [26 32 27] は 青「26」、緑「32」、赤「26」の意味になります。 4つのピクセルとも同じ色なのは、モザイク処理を行って色が同じになった為と考えられます。 なお [x1,y1,x2,y2] の場合、3次元データに4次元データとしてアクセスすることになりエラーになります。 [x1,y1,0] とすると単一のピクセルの色情報が取得できます。座標「x1,y1」の「青」の色情報できます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問