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

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

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

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

Q&A

解決済

1回答

3274閲覧

python モザイク処理

Ma_sa

総合スコア12

Python

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

0グッド

0クリップ

投稿2017/11/29 08:23

編集2017/11/29 11:15

###前提・実現したいこと
画像を読み込みモザイク処理を施し、保存するプログラムを作りたいです。
###発生している問題・エラーメッセージ

実行コマンド python exer5.py img.png 10 e.png エラー Traceback (most recent call last): File "exer5.py", line 35, in <module> img[y,x,2] = img[y,x,rectR(R*R)] TypeError: 'numpy.ndarray' object is not callable ###該当のソースコード
# -*- coding: utf-8 -*- # exer5.py # モザイク画像の作成 # 第2引数はモザイクのサイズ import numpy as np import sys import cv2 fname_in = sys.argv[1] R = int(sys.argv[2]) fname_out = sys.argv[3] #画像をロードしfloat型へ img = cv2.imread(fname_in) img = np.float64(img) #モザイク画像の作成 #以下を編集(for文の範囲などは適宜変更すること) for y in range( int( img.shape[0] / R + 1) ) : for x in range( int( img.shape[1] / R + 1) ) : #ヒント:スライス表現により画像の矩形領域を取り出せる rectR=0 rectG=0 rectB=0 # 以下は,[y*R, (y+1)*R) x [y*R, (y+1)*R) の矩形領域のrチャンネル rectR+= img[y*R:(y+1)*R, x*R:(x+1)*R, 2] rectG+= img[y*R:(y+1)*R, x*R:(x+1)*R, 1] rectB+= img[y*R:(y+1)*R, x*R:(x+1)*R, 0] img[y,x,2] = img[y,x,rectR(R*R)] img[y,x,1] = img[y,x,rectG(R*R)] img[y,x,0] = img[y,x,rectB(R*R)] cv2.imwrite(fname_out, np.uint8( img) ) ```###試したこと for文の中を自分で手を加えました。 頭が混乱してしまい、よく分からなくなってしまったのですがこれはアルゴリズムとしてどこを改良すべきなのでしょうか ###補足情報(言語/FW/ツール等のバージョンなど) 個人的には     img[y,x,2] = img[y,x,rectR(R*R)] img[y,x,1] = img[y,x,rectG(R*R)] img[y,x,0] = img[y,x,rectB(R*R)] のためのfor文を作るべかなのかと考えていますが分けわかんなくなってしまいました。 すいません、よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

スライス表現により矩形領域に同じ値を一括セットする例です。

Python

1import numpy as np 2import cv2 3 4src = np.zeros((320,240,3),dtype = float) # hight x width x 3(GBR) 5dst = src[:] 6PIX = 80 # モザイクの大きさ[ピクセル] 7for y in range(0, src.shape[0], PIX): 8 for x in range(0, src.shape[1], PIX): 9 color = (y,x,255) # G, B, R 10 print('x=%2d, y=%2d color=%s'%(x,y,color)) 11 12 dst[y:y+PIX,x:x+PIX] = color # スライス表現により矩形領域に同じ値を一括セット 13 # 以下と同じ 14 #dst[y:y+PIX,x:x+PIX,0] = color[0] 15 #dst[y:y+PIX,x:x+PIX,1] = color[1] 16 #dst[y:y+PIX,x:x+PIX,2] = color[2] 17 18cv2.imwrite('dst.png', np.uint8(dst))

dst.png
イメージ説明

投稿2017/11/30 04:21

can110

総合スコア38233

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

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

Ma_sa

2017/12/25 05:31

返信が遅くなり申し訳ありません。 結論からいうと自力で解決できました。今回私が知りたかったことはモザイク処理をpythonのスライス表現でどう表せばいいかということでした。配列の各数値の総和を取り、その平均で、指定した範囲を塗りつぶすことで解決できました。 今回返信が遅くなり補足の質問もしていない状況でこの回答を評価をしないのは不公平だと感じたのでベストアンサーに選ばさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問