OpenCVによるデータの水増し（for文）

# はじめに
　画像解析を実施するためにOpenCVを用いてデータの水増しをする。OpenCVによる画像処理の効果は[OpenCVによる画像処理の効果](https://qiita.com/FujiedaTaro/items/2c270f2b8376fc0c4a35)にて確認した。今回はそれらの方法を用いてデータを水増しする。

プログラムの短縮版はこちら
[OpenCVによるデータの水増し（lambda）](https://qiita.com/FujiedaTaro/items/1196df74d5d12dd9fe5d)

#手順
　画像処理の種類と条件、水増しの量を次の表の通りとする。表の中身をリストとして本文に記述し、
for文でループさせる。合計48枚の画像を水増しする。記述の方法は可読性を重視し、for文によるループをメインとする。※無名関数を用いることでより簡便に記述することができる、はず。

|画像処理の種類|条件|水増しの量|
|:---|:---|:---|:---|
|リサイズ|1/2、1/3、1/5、1/7倍|4枚|
|モザイク|1/3、1/5、1/7、1/10倍|4枚|
|回転|45、135、225、270°|4枚|
|反転|x軸中心、y軸中心、両方|3枚|
|色調変換|-|1枚|
|色変換|-|1枚|
|THRESH_BINARY|閾値50、100、150、200|4枚|
|THRESH_BINARY_INV|閾値50、100、150、200|4枚|
|THRESH_TRUNC|閾値50、100、150、200|4枚|
|THRESH_TOZERO|閾値50、100、150、200|4枚|
|THRESH_TOZERO_INV|閾値50、100、150、200|4枚|
|ぼかし|カーネルサイズ11×11、31×31、51×51、71×71|4枚|
|グレースケール|-|1枚|
|ノイズ除去|color、gray|2枚|
|膨張|フィルター周囲4つ、8つ|2枚|
|収縮|フィルター周囲4つ、8つ|2枚|
|合計|-|48枚|

#水増しした画像の一例
- 元画像
![img.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252172/5f898381-81ea-573a-c2b5-25483166abd9.jpeg)

- モザイク
![img5.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252172/f0f9683b-6ae6-d2c6-cec4-25e017a1e722.jpeg)![img6.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252172/a1d062a8-145d-e859-74d0-22746b3276a5.jpeg)
![img7.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252172/7ac27472-8e97-6234-e5c0-72b8074ba9e0.jpeg)![img8.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252172/51d9250f-d014-6b08-de46-13cc5e20b74d.jpeg)
- 回転
![img9.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252172/8b070c5e-aee1-83cb-43df-99b5d963b87a.jpeg)![img10.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252172/271fa63f-79f9-a579-fa3d-4a8ea8364634.jpeg)
![img11.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252172/7d83a593-c27a-6761-5499-3c602f4c270b.jpeg)![img12.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252172/5ad7ae3b-982a-1cdb-462d-d6099e065256.jpeg)
- THRESH_BINARY_INV
![img22.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252172/f2cb929b-2303-6e74-dd7f-ea50d9ff2286.jpeg)![img23.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252172/6bda19ef-4521-d85c-d4d9-48673b1a3ec0.jpeg)
![img24.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252172/a4debfe5-1553-002b-70e2-7ee324e960e2.jpeg)![img25.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252172/d250dda2-9398-daf1-e390-42ed4a8b1fe3.jpeg)
- ぼかし
![img38.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252172/daced487-7c8e-0a1e-ed75-991be2f823b9.jpeg)![img39.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252172/6b0d0bcd-18bc-5bc3-3384-de2830724184.jpeg)
![img40.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252172/8b676278-db4d-abf3-6bca-89e5c87f38ab.jpeg)![img41.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252172/5bbd1436-bb21-d590-614d-aab3f8552887.jpeg)


#OpenCVによるデータの水増し
　画像検索条件を調整することでお好きなように画像変換ができる。

```python
import numpy as np
import cv2

#画像変換条件
filter1 = np.array([[0, 1, 0],
                   [1, 0, 1],
                   [0, 1, 0]], np.uint8)
filter2 = np.ones((3, 3))

list_resize = [2, 3, 5, 7]
list_mosaic = [3, 5, 7, 10]
list_rotation = [45, 135, 225, 315]
list_flip = [0, 1, -1]
list_cvt1 = [0]
list_cvt2 = [0]
list_THRESH_BINARY = [50, 100, 150, 200]
list_THRESH_BINARY_INV = [50, 100, 150, 200]
list_THRESH_TRUNC = [50, 100, 150, 200]
list_THRESH_TOZERO = [50, 100, 150, 200]
list_THRESH_TOZERO_INV = [50, 100, 150, 200]
list_gauss = [11, 31, 51, 71]
list_gray = [0]
list_nois_gray = [0]
list_nois_color = [0]
list_dilate = [filter1, filter2]
list_erode = [filter1, filter2]

#水増し画像の合計
list_sum =len(list_resize) + len(list_mosaic) + len(list_rotation) + len(list_flip) + len(list_cvt1) + len(list_cvt2) + \
          len(list_THRESH_BINARY) + len(list_THRESH_BINARY_INV) + len(list_THRESH_TRUNC) + len(list_THRESH_TOZERO) + \
          len(list_THRESH_TOZERO_INV) + len(list_gauss) + len(list_gray) + len(list_nois_gray) + len(list_nois_color) + \
          len(list_dilate) + len(list_erode)
print("合計：{}枚".format(list_sum))

#画像タイトル用ナンバーの初期化
num = 0

#水増しの実行と保存
def save(cnv_img):
    cv2.imwrite("CleansingData/img" + str(num) + ".jpg", cnv_img)

img = cv2.imread("./CleansingData/img.jpg")

for i in list_resize:
    num += 1 
    cnv_img = cv2.resize(img, (img.shape[1] // i, img.shape[0] // i)) 
    save(cnv_img)
for i in list_mosaic:
    num +=1
    cnv_img = cv2.resize(img, (img.shape[1] // i, img.shape[0] // i))
    cnv_img = cv2.resize(cnv_img, (img.shape[1],img.shape[0]))
    save(cnv_img)
for i in list_rotation:
    num += 1
    mat = cv2.getRotationMatrix2D(tuple(np.array([img.shape[1] / 2, img.shape[0] /2])), i, 1)
    cnv_img = cv2.warpAffine(img, mat, (img.shape[1], img.shape[0]))
    save(cnv_img)
for i in list_flip:
    num += 1
    cnv_img = cv2.flip(img, i)
    save(cnv_img)
for i in list_cvt1:
    num += 1
    cnv_img = cv2.cvtColor(img, cv2.COLOR_BGR2LAB)
    save(cnv_img)
for i in list_cvt2:
    num += 1
    cnv_img = cv2.bitwise_not(img)
    save(cnv_img)
for i in list_THRESH_BINARY:
    num += 1
    retval, cnv_img = cv2.threshold(img, i, 255, cv2.THRESH_BINARY)
    save(cnv_img)
for i in list_THRESH_BINARY_INV:
    num += 1
    retval, cnv_img = cv2.threshold(img, i, 255, cv2.THRESH_BINARY_INV)
    save(cnv_img)
for i in list_THRESH_TRUNC:
    num += 1
    retval, cnv_img = cv2.threshold(img, i, 255, cv2.THRESH_TRUNC)
    save(cnv_img)
for i in list_THRESH_TOZERO:
    num += 1
    retval, cnv_img = cv2.threshold(img, i, 255, cv2.THRESH_TOZERO)
    save(cnv_img)
for i in list_THRESH_TOZERO_INV:
    num += 1
    retval, cnv_img = cv2.threshold(img, i, 255, cv2.THRESH_TOZERO_INV)
    save(cnv_img)
for i in list_gauss:
    num += 1
    cnv_img = cv2.GaussianBlur(img, (i, i), 0)
    save(cnv_img)
for i in list_gray:
    num += 1
    cnv_img = cv2.imread("./CleansingData/img.jpg", 0)
    save(cnv_img)
for i in list_nois_gray:
    num += 1
    cnv_img = cv2.fastNlMeansDenoising(cnv_img)
    save(cnv_img)
for i in list_nois_color:
    num += 1
    cnv_img = cv2.fastNlMeansDenoisingColored(img)
    save(cnv_img)
for i in list_dilate:
    num += 1
    cnv_img = cv2.dilate(img, i)
    save(cnv_img)
for i in list_erode:
    num += 1
    cnv_img = cv2.dilate(img, i)
    save(cnv_img)
```

# おわりに
　画像の水増しができた。しかし、プログラムが長すぎる。
次回は本文の短縮にトライする。