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

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

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

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

OpenCV

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

2回答

1942閲覧

Python 画像畳み込み処理

goki_gottan

総合スコア168

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

OpenCV

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2021/03/26 09:23

Pythonで画像を小さく(畳み込み)しようとしておりますが、
画質に変化はありますが、画像サイズを小さくできません。

下記は、MaxPool処理です。
ですが、出力画像サイズは入力画像サイズと変化ありません。

import numpy as np import cv2 import matplotlib.pyplot as plt import os def maxPooling(img,k): dst = img.copy() w,h,c = img.shape size = k // 2 print(size) # プーリング処理 for x in range(size, w, k): for y in range(size, h, k): dst[x-size:x+size,y-size:y+size,0] = np.max(img[x-size:x+size,y-size:y+size,0]) dst[x-size:x+size,y-size:y+size,1] = np.max(img[x-size:x+size,y-size:y+size,1]) dst[x-size:x+size,y-size:y+size,2] = np.max(img[x-size:x+size,y-size:y+size,2]) return dst # 画像読込 img = cv2.imread(〇) # Maxプーリング img = maxPooling(img,4) # 画像保存 cv2.imwrite(〇, img) # 画像表示 cv2.imshow('image0', img) cv2.waitKey(0)

宜しくお願いいたします。

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

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

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

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

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

guest

回答2

0

Pythonによるディープラーニングの実装➂ の「プーリング層の実装」
ゼロから作る Deep Learning 第7章 の「Poolingレイヤの実装」
あたりのコードを参考にして、ストライド2で実行する

投稿2021/03/27 00:04

jbpb0

総合スコア7653

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

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

goki_gottan

2021/03/28 05:57

ありがとうございます。 コードが見たいです。 また、応用性もほしいです。 たとえば、maxだけでなく、averageとかもあったらいいですね
jbpb0

2021/03/28 08:30

> コードが見たい 回答に載せたリンク先にあります
goki_gottan

2021/03/29 00:54

ありがとうございます。 Poolingクラスを使うと思うのですが、その関数を使うまでの過程はどのようにしたらよいでしょうか。
jbpb0

2021/03/29 02:14

まずは、自分で考えてやってみる やってみてうまく行かなくても、何でうまく行かないのか、どうすればうまく行くのかを自分で考える どうしても分からなければ、そこを質問する 質問する際は、自分でどうやってみたのか、どううまく行かないのか、うまく行かない理由を自分はどう考えているのか、も書く やってほしいことだけを書かない まずやる 質問はそれから
fana

2021/03/29 02:24

「画素値のRead/Writeさえできるなら,そのくらいの処理は単に自前実装すりゃいいんじゃないの?」と思うのですが…それを避けるべき理由が何かあるのでしょうか? (python + OpenCV なタグで,よくこんな雰囲気の質問を見かける気がするのですが,自前でループ組むともう速度面に著しい問題が出るだとか,何かそういう話が暗黙的に存在しているのでしょうか? 「python + OpenCV」というジャンルに.)
goki_gottan

2021/03/29 03:30

ありがとうございます。 openCVでreadはできます。 リードした画素データ、RGBの場合、imgとします。 そのimgを、img2=Pooling(img)とかにします。 それで解決しますか? それが分かりませんので・・・質問させていただきました。
fana

2021/03/29 05:22

(1) まず,所望の(小さい)サイズの結果画像バッファを用意する. (2) で,その結果画像バッファの各画素について,その画素値を決定する(:ここでは,入力画像上の対応範囲を走査して最大値を求む). というだけの話に思えるのだが…??
goki_gottan

2021/03/29 06:50

ご回答ありがとうございます。 よくあるサイトでは、[2,2]ピクセルの例えばMaxを取得する。ズラす。 これを繰り返しますよね? 結果画像バッファは必要でしょうか?
fana

2021/03/29 09:03

> dst = img.copy() 質問文内のコードで言えば,これが結果用のバッファ(のつもり)なんじゃないの? 何が疑問点なのかが全くわからんっす.
guest

0

dst = img.copy()

をして、dstを関数の値として返しているので、画像サイズは同じになっています。

以下を参考にして画像サイズの変更をしましょう。

OpenCVで画像サイズの変更をしてみた

投稿2021/03/26 09:38

ppaul

総合スコア24670

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

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

goki_gottan

2021/03/26 11:38

ご回答ありがとうございます。 参考サイトは画像のリサイズで、どのようなリサイズ処理されているのか分かりません。 叩き込みとmaxpoolを同時にしたいのですが
ppaul

2021/03/26 12:01

return cv2.resize(dst. w//k, h//k) ではだめでしょうか。
goki_gottan

2021/03/26 12:30

補間ということは、どちらかというとaverageに近いですよね? そうではなく、4ピクの中で輝度の高いものを取り出しているのです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問