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

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

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

Neural Network Consoleは、ソニー社が開発したディープラーニング・ツール。ニューラルネットワークを視覚的に設計することが可能で、学習や評価をスムーズに実現できます。また、ニューラルネットワークを自動的に構築する機能も備わっています。

OpenCV

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

Python

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

Q&A

1回答

1032閲覧

OpenCVのカメラからファイルに保存するときに,640×480 (4:3)から横幅を切って150×150(1:1)のサイズにすることはできますか?

max12345

総合スコア20

Neural Network Console

Neural Network Consoleは、ソニー社が開発したディープラーニング・ツール。ニューラルネットワークを視覚的に設計することが可能で、学習や評価をスムーズに実現できます。また、ニューラルネットワークを自動的に構築する機能も備わっています。

OpenCV

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

Python

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

0グッド

0クリップ

投稿2021/02/01 08:58

OpenCVのカメラからキーボードのPをクリックしてキャプチャーする際に,640×480 (4:3)から横幅を切って150×150(1:1)のサイズにすることはできますか?
#試した方法
今のプログラムの書き方だと、640×480から150×150のサイズに変更されるようにはなっていますが、映っているもの全てが細長くなってしまいます。
これを改善するために、https://qiita.com/fanfanta/items/8dfd598c7d22b07847b5このようなサイトの様に左右を切り取るようにしたいのですがプログラムをどう書き直せばよいのでしょうか。

Python

1import nnabla as nn 2import nnabla.functions as F 3import nnabla.parametric_functions as PF 4from nnabla.utils.data_iterator import data_iterator_csv_dataset 5import os 6import cv2 7from datetime import datetime 8import pandas as pd 9import matplotlib.pyplot as plt 10import numpy as np 11from PIL import Image 12 13 14 15def network(x, test=False): 16 17 # Input:x -> 3,150,150 18 # ImageAugmentation 19 if not test: 20 h = F.image_augmentation(x, (3,150,150), (0,0), 1.0, 1.0, 0.0, 0.7, 0.0, False, False, 1.2, False, 1.2, 0, False, 0.0) 21 else: 22 h = x 23 24 # Convolution -> 8,150,150 25 h = PF.convolution(h, 8, (3,3), (1,1), name='Convolution') 26 # ReLU 27 h = F.relu(h, True) 28 # Convolution_2 29 h = PF.convolution(h, 8, (3,3), (1,1), name='Convolution_2') 30 # ReLU_2 31 h = F.relu(h, True) 32 # MaxPooling -> 8,75,75 33 h = F.max_pooling(h, (2,2), (2,2)) 34 # Convolution_3 -> 16,75,75 35 h = PF.convolution(h, 16, (3,3), (1,1), name='Convolution_3') 36 # ReLU_3 37 h = F.relu(h, True) 38 # Convolution_4 39 h = PF.convolution(h, 16, (3,3), (1,1), name='Convolution_4') 40 # ReLU_4 41 h = F.relu(h, True) 42 # MaxPooling_2 -> 16,37,37 43 h = F.max_pooling(h, (2,2), (2,2)) 44 # Convolution_5 -> 32,37,37 45 h = PF.convolution(h, 32, (3,3), (1,1), name='Convolution_5') 46 # ReLU_5 47 h = F.relu(h, True) 48 # Convolution_6 49 h = PF.convolution(h, 32, (3,3), (1,1), name='Convolution_6') 50 # ReLU_6 51 h = F.relu(h, True) 52 53 # MaxPooling_3 -> 32,18,18 54 h = F.max_pooling(h, (2,2), (2,2)) 55 # Convolution_8 -> 64,18,18 56 h = PF.convolution(h, 64, (3,3), (1,1), name='Convolution_8') 57 # ReLU_8 58 h = F.relu(h, True) 59 # Convolution_9 60 h = PF.convolution(h, 64, (3,3), (1,1), name='Convolution_9') 61 # ReLU_9 62 h = F.relu(h, True) 63 64 # MaxPooling_4 -> 64,9,9 65 h = F.max_pooling(h, (2,2), (2,2)) 66 # Convolution_11 -> 128,9,9 67 h = PF.convolution(h, 128, (3,3), (1,1), name='Convolution_11') 68 # ReLU_11 69 h = F.relu(h, True) 70 # Convolution_12 71 h = PF.convolution(h, 128, (3,3), (1,1), name='Convolution_12') 72 # ReLU_12 73 h = F.relu(h, True) 74 75 # MaxPooling_5 -> 128,4,4 76 h = F.max_pooling(h, (2,2), (2,2)) 77 # Affine -> 100 78 h = PF.affine(h, (100,), name='Affine') 79 # ReLU_14 80 h = F.relu(h, True) 81 # Dropout 82 if not test: 83 h = F.dropout(h, 0.5, 0) 84 # Affine_2 85 h = PF.affine(h, (100,), name='Affine_2') 86 # ReLU_15 87 h = F.relu(h, True) 88 # Dropout_2 89 if not test: 90 h = F.dropout(h, 0.5, 0) 91 # Affine_3 -> 26 92 h = PF.affine(h, (26,), name='Affine_3') 93 # Softmax 94 h = F.softmax(h) 95 # CategoricalCrossEntropy -> 1 96 #h = F.categorical_cross_entropy(h, y) 97 return h 98class_names = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'] 99cap = cv2.VideoCapture(0) # 任意のカメラ番号に変更する 100 101 102new_dir_path = "./realtime/" 103os.makedirs(new_dir_path, exist_ok=True) 104 105 #カメラスタート 106while True: 107 108 ret, frame = cap.read() 109 # フレームが取得できない場合はループを抜ける 110 111 112 cv2.imshow("camera", frame) 113 114 k = cv2.waitKey(1)&0xff # キー入力を待つ 115 if k == ord('p'): 116 117 # 「p」キーで画像を保存 118 119 date = datetime.now().strftime("%Y%m%d_%H%M%S") 120 path = new_dir_path + date +".png" 121 cv2.imwrite(path, frame) 122 image_gs = cv2.imread(path) 123 124 path = new_dir_path + date +".png" 125 dst = cv2.resize(image_gs,(150,150)) 126 cv2.imwrite(path, dst) 127 128 f = pd.DataFrame(columns=["x:data","y:data"]) 129 xdata = path 130 ydata = 0 131 new_name = pd.Series([xdata,ydata],index=f.columns) 132 f = f.append(new_name, ignore_index=True) 133 f.to_csv('valu.csv',index=False,header = True ) 134 135 test_data = data_iterator_csv_dataset("C:\Users\username\Desktop\outdata\valu.csv",1,shuffle=False,normalize=True) 136 137 138 path = new_dir_path + "test" +".png" 139 cv2.imwrite(path, frame) 140 image_gs = cv2.imread(path) 141 142 path = new_dir_path + date +".png" 143 dst = cv2.resize(image_gs,(150,150)) 144 cv2.imwrite(path, dst) 145 146 147 148 np.set_printoptions(suppress=True) 149 #ネットワークの構築 150 151 nn.clear_parameters() 152 153 154 nn.load_parameters('C:\Users\username\Desktop\outdata\smallyubimoji.files\20210126_195301\results.nnp') 155 print("load model") 156 157 x = nn.Variable((1,3,150,150)) 158 x.d = cv2.resize(frame, (150,150)).transpose(2,0,1).reshape(x.shape) 159 y = network(x, test=True) 160 y.forward() 161 162 print(y.d[0]) 163 print(np.argmax(y.d[0])) 164 print(class_names[np.argmax(y.d[0])]) 165 166 elif k == ord('q'): 167 # 「q」キーが押されたら終了する 168 169 break 170 171 # キャプチャをリリースして、ウィンドウをすべて閉じる 172cap.release() 173cv2.destroyAllWindows()

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

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

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

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

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

guest

回答1

0

dst = cv2.resize(image_gs,(150,150))

dst = cv2.resize(image_gs[:,80:560],(150,150))

に変更すればよいと思います。

投稿2021/02/01 09:23

ppaul

総合スコア24670

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

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

max12345

2021/02/01 12:08

すみません。訂正です。128×128の場合はどう記述したらいいてすか。
max12345

2021/02/03 08:36

[:,80:560] ,(128,128)でよいでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問