嫁の妹がこんなに可愛いわけがない

今週やったことメモ。
OpenCVというのを使ってみようと思ってインストールに手間取った話。
waifu2xっぽい何かを思いついたのだが・・・。


##brewでインストールしたい
まずはリポジトリ追加する。

``brew tap homebrew/science``


``brew search opencv``
で検索して、3の方を入れることにした。
ここで``brew install opencv3``してしまってからが長かった。これだと2系のpythonでしか使えない?のと、（うちの環境だと）el capitanになってからpipでインストール通らなかったりなんか面倒だし、そもそも3系でやりたいのでvertualenvにしたかった。それでパスやらリンクやらググってやってみたけど、うまくいかず。
ググって正解だったのはここ。http://blog.amedama.jp/entry/2015/10/01/223056


brewでpython3インストールしてしまうのと、
``brew install opencv3 --with-python3``
した。
で、ここから依存関係ビルド地獄。数時間かかったよ。最初にインストールした時には一瞬だったんだけど、これは多分デフォルトの2系のパッケージには入ってたのが3系では初期状態でしたってことなんだとは思うけど、俺もMBPもバッテリー尽きかけた。


それから
``$ echo /usr/local/opt/opencv3/lib/python3.5/site-packages >> /usr/local/lib/python3.5/site-packages/opencv3.pth
``

で解決。

##試してみる

イメージ画像表示するサンプルだけ試して寝るつもりだったけど、リサイズとかやってみたら思いついたのでもう一晩やってみた。

```yomeimo2x.py

#coding: utf-8

import cv2
import numpy
from PIL import Image

# 元画像を読み込んで、リサイズを2種類の補間方法で作成。
img = cv2.imread('miku_small.png', cv2.IMREAD_COLOR)
twiceImg_org = cv2.resize(img, None, fx = 2, fy = 2,interpolation = cv2.INTER_AREA)
twiceImg_tgt = cv2.resize(img, None, fx = 2, fy = 2,interpolation = cv2.INTER_LINEAR)
cv2.imwrite('x2_org.png', twiceImg_org)
cv2.imwrite('x2_tgt.png', twiceImg_tgt)





#LINEARでボケた部分をAREAの色を拾ってきて塗り直す。
#元画像のパレット色だけ使ったらボケた感じを無くなると思った。
orgimg = Image.open("./x2_org.png")
tgtimg = Image.open("./x2_tgt.png")

newimg = Image.new('RGB', tgtimg.size)

orgimg.convert("RGB")
tgtimg.convert("RGB")

orgPixelSizeTuple = orgimg.size
tgtPixelSizeTuple = tgtimg.size

orgcolors = []
tgtcolors = []
newcolors = []

#ここみた。http://qiita.com/zaburo/items/0b9db87d0a52191b164b
def getNearPixelColors(rgb,img,sizex,sizey,x,y):

    rgb1=rgb2=rgb3=rgb4=rgb5=rgb6=rgb7=rgb8=rgb


    #1
    if x-1 > 0 and y+1 < sizey:
        rgb1 = img.getpixel((x-1,y+1))

    #2
    if y+1 < sizey:
        rgb2 = img.getpixel((x,y+1))

    #3
    if x+1 < sizex and y+1 < sizey:
        rgb3 = img.getpixel((x+1,y+1))

    #4
    if x-1 > 0:
        rgb4 = img.getpixel((x-1,y))

    #5
    if x+1 < sizex:
        rgb5 = img.getpixel((x+1,y))

    #6
    if x-1 > 0 and y-1 > 0:
        rgb6 = img.getpixel((x-1,y-1))

    #7
    if y-1 > 0:
        rgb7 = img.getpixel((x,y-1))

    #8
    if x+1 < sizex and y-1 > 0:
        rgb8 = img.getpixel((x+1,y-1))


    colarray = [rgb1,rgb2,rgb3,rgb4,rgb5,rgb6,rgb7,rgb8]
    max = 0
    result = rgb
    for c in colarray:
        tmp = numpy.corrcoef(rgb,c)[0][1]
        if max < tmp:
            result = c
            max = tmp

        return result




for i in range(orgPixelSizeTuple[0]):
  for j in range(orgPixelSizeTuple[1]):
     rgb = orgimg.getpixel((i,j))
     if rgb not in orgcolors:
        orgcolors.append(rgb)



for k in range(tgtPixelSizeTuple[0]):
    for l in range(tgtPixelSizeTuple[1]):
        rgb = tgtimg.getpixel((k,l))
        if rgb not in tgtcolors:
            tgtcolors.append(rgb)
        newimg.putpixel((k,l), rgb)



set_color_diff = set(tgtcolors) - set(orgcolors)
diffcolors = list(set_color_diff)


max = 0
newcol = (0,0,0)



for i in range(tgtPixelSizeTuple[0]):
    for j in range(tgtPixelSizeTuple[1]):
        rgb = newimg.getpixel((i,j))
        if rgb in diffcolors:
            newimg.putpixel((i,j),getNearPixelColors(rgb,orgimg,tgtPixelSizeTuple[0],tgtPixelSizeTuple[1],i,j))

    else:
        newimg.putpixel((i,j), (rgb))

# ドット絵的になるはずだった。
newimg.save("newimg_Dot.png", "PNG")

# 手書き風になるはずだった。
newimg4Blur= cv2.imread('newimg_Dot.png', cv2.IMREAD_COLOR)
Blured = cv2.medianBlur(newimg4Blur, 3)
cv2.imwrite('newimg_Blur.png', Blured)




```


- ドット絵のテイストのまま拡大するみたいな感じにしたかったんだけど、汚い絵が出てくるだけだった。あまりOpenCVっぽくないし。自分でも何やってるのかわからなくなったので、また今度機械学習とかに興味出てきたら思い出してみること。