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

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

ただいまの
回答率

91.35%

  • Python

    3821questions

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

python モザイク処理

受付中

回答 1

投稿 2017/11/29 17:23 ・編集 2017/11/29 20:15

  • 評価
  • クリップ 0
  • VIEW 163

Ma_sa

score 1

前提・実現したいこと

画像を読み込みモザイク処理を施し、保存するプログラムを作りたいです。

発生している問題・エラーメッセージ

実行コマンド
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文を作るべかなのかと考えていますが分けわかんなくなってしまいました。
すいません、よろしくお願いします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

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

import numpy as np
import cv2

src = np.zeros((320,240,3),dtype = float) # hight x width x 3(GBR)
dst = src[:]
PIX = 80 # モザイクの大きさ[ピクセル]
for y in range(0, src.shape[0], PIX):
    for x in range(0, src.shape[1], PIX):
        color = (y,x,255) # G, B, R
        print('x=%2d, y=%2d color=%s'%(x,y,color))

        dst[y:y+PIX,x:x+PIX] = color # スライス表現により矩形領域に同じ値を一括セット
        # 以下と同じ
        #dst[y:y+PIX,x:x+PIX,0] = color[0]
        #dst[y:y+PIX,x:x+PIX,1] = color[1]
        #dst[y:y+PIX,x:x+PIX,2] = color[2]

cv2.imwrite('dst.png', np.uint8(dst))


dst.png
イメージ説明

投稿 2017/11/30 13:21

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

ただいまの回答率

91.35%

関連した質問

  • 解決済

    ソート結果が正しくない

    前提・実現したいこと csvファイルdata1.csvおよびそれと同じフォーマットのcsvファイルdata2.csv, csvファイルdata3.csvのそれぞれに対して,温度(

  • 受付中

    関数の実装、matmulを利用

    追記:print(np.matmul(A, x)) まではできたのですが、それ以降はどのように書けば良いでしょうか?

  • 解決済

    pythonの画像の読み込みについて

    pythonの勉強をしています。ある画像を読み込み、それを配列化してテキストデータとしてファイルに保存したいです。 下記のようなコードを描いたのですが、これが正しく出力がされ

  • 受付中

    Pythonで複数画像データを配列化して保存する方法

    Pythonで複数画像データを数値化して配列に保存することを考えています。 1枚の画像データはflatten()関数で1行にして、それを画像枚数分だけ配列に保存したいです。

  • 解決済

    変数sys.argvが何をしているのか知りたい

    皆様いつもお世話になっております。 こちらのコードを読み解いているのですが、 python お天気apiから近日の天気を取得する #encoding:utf-8 impor

  • 解決済

    python3で画像の畳み込みをすると白っぽくなる

    前提・実現したいこと pythonで次のような画像どうしの畳み込み演算を行い、手ブレを再現したい。 詳細は下記の通りです。 ご教授のほどよろしくお願い致します。 発

  • 解決済

    nanの入れ替えをしたい

    python3で、配列内に計算上発生したnanを0で入れ替えるプログラムを書きたいと思っているのですが、入れ替えができません。 for i in range(0,10)

  • 解決済

    tensorflowでのalexnetの実装で精度が変化しない

    前提・実現したいこと こんにちは。 趣味で画像認識を勉強しているものです。 「tensorflowでゆるゆりの製作会社を判定してみた」(http://mobiles-han.blo

同じタグがついた質問を見る

  • Python

    3821questions

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