ラベル 画像処理 の投稿を表示しています。 すべての投稿を表示
ラベル 画像処理 の投稿を表示しています。 すべての投稿を表示

2016年1月31日日曜日

イメージキャプチャ用Chrome Extension:Awesome Screenshot

このエントリーをはてなブックマークに追加
この前、ブラウザの画面キャプチャ用にブラウザキャプチャ用Chrome Extension:FireShotを紹介したのだが、今度はスクリーンショットを撮った後に簡単に隠したいとこにぼかしやハイライトをつけたいなぁと思った時、FireShotではできなかったので、もう一度探してみるとこに。

そこで見つかったのが拡張機能Awesome Screenshotだった。


Chromeのツールバーからこんな感じで選べる。


例えばスクリーンショットに映った個人名などのあまり人に見せたくないものにぼかしを入れたい場合、Awesome Screenshotでスクリーンショットを撮った後、この水滴みたいな部分をクリックする。


するとシェイプでぼかしを入れたい部分を範囲選択できるので、これでどんどんぼかすことができる。


ただし、ローカルに保存するファイル名がWEBページのタイトルしかつかないので、同じページでいくつかのスクリーンショットを撮る場合はいちいち名前を変えてやらないといけない。

前回紹介したブラウザキャプチャ用Chrome Extension:FireShotだとデフォルトはWEBページのタイトルと時分秒などを設定でテンプレートとして設定できるので便利。

なので、スクリーンショットに簡単に加工を付けたい時と、ただ撮るだけの時とは使い分けるようにしてる。しかもChromeで完結しているのでWindowsやMacなどOSによって使い勝手のいいアプリを探す手間も省けて便利。

2016年1月28日木曜日

イメージキャプチャ用Chrome Extension:FireShot

このエントリーをはてなブックマークに追加
先に言っておくと小ネタだ。

ちょっとブラウザでスックリーンショットを撮りたいけど、ツールバーとかタブとか見えてていやだなぁって思ってしまうタチなので、余計なものを省いてスクリーンショットを撮ろうといちいち範囲選択してって割とめんどくさい。

そんな時にいいスクリーンショット取れるChrome Extensionないかなぁと思って探してたらあったのがこのFireShot。試したら割と便利だった。


こんな感じで色々と撮れる範囲を選べる。


設定でファイル名を選べたり、JPGとPNGで選べるし、ショートカットも使える。日本語も対応。少し変な日本語多いけどw


普通にブラウザごとまるっとスクリーンショットを撮ったらこう。


FireShotで見える部分だけで撮るとこうなる。ツールバーとかタブとかの余計な部分がなくなっていい感じ。


全部のページを撮るとこう。


これでさくっと撮れて便利だ。

2015年11月16日月曜日

OpenCV Tutorial(4)〜特定画像の検出

このエントリーをはてなブックマークに追加
ドラクエの戦闘画面からカンダタの子分を取り出してみた。

元画像のこれから
これを取り出してみる。

import cv2
import numpy as np
from matplotlib import pyplot as plt

img_rgb = cv2.imread('dq.jpeg')
img_rgb2 = img_rgb.copy()
img_gray = cv2.cvtColor(img_rgb2, cv2.COLOR_BGR2GRAY)
template = cv2.imread('template.png',0)
w, h = template.shape[::-1]

res = cv2.matchTemplate(img_gray,template,cv2.TM_CCOEFF_NORMED)
threshold = 0.8
loc = np.where( res >= threshold)
for pt in zip(*loc[::-1]):
    cv2.rectangle(img_rgb2, pt, (pt[0] + w, pt[1] + h), (255,0,0), 1)

plt.subplot(121),plt.imshow(img_rgb)
plt.title('Matching Result'), plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(img_rgb2)
plt.title('Detected Point'), plt.xticks([]), plt.yticks([])
plt.show()

おぉ、とりだせた。


2015年11月15日日曜日

OpenCV Tutorial(3)〜画像の輪郭検出

このエントリーをはてなブックマークに追加
本当ならガウシアンフィルタにかけてノイズの提言をさせてから、色相の勾配を該当ピクセルの近傍と比較して計算して...ってやらないといけないわけだけど、OpenCVに関しては、関数を一発呼ぶだけでやってくれる。

すげえ。

import cv2
import numpy as np
from matplotlib import pyplot as plt

# グレースケールで読み込み
img = cv2.imread('20120129-00000000-jijp-000-0-view-thumb-450x300-8462.jpg',0)

# 閾値の上限200、下限を100に指定
edges = cv2.Canny(img,100,200)

plt.subplot(121),plt.imshow(img,cmap = 'gray')
plt.title('Original Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(edges,cmap = 'gray')
plt.title('Edge Image'), plt.xticks([]), plt.yticks([])

plt.show()


今日の作業

この辺からだいたい分かっとく必要のあるところと、飛ばしてもいいところを見極めるのが難しくなってきた。そのおかげでか進捗が少ない。。。

2015年11月13日金曜日

OpenCV Tutorial(2)〜画像の平滑化

このエントリーをはてなブックマークに追加
Smoothing Images

画像の平滑化手法(Smoothing Images)に幾つかのやり方があり、それぞれ得意/不得意があるので簡単にでも理解した上で使い分けるのがベター。

大きくはノイズを減らすのが得意なlow-pass filters(LPF)と輪郭をシャープにするhigh-pass filters(HPF)に分けられる。

代表的な種類としてはこんなものがある。
  • 2D Convolution(2次元畳み込み)
  • Averaging(平均)
  • Gaussian Blurring(ガウシアンぼかし)
  • Median Blurring(中央値ぼかし)
  • Bilateral Filtering(バイラテラルフィルタ)
それぞれやってみる。画像は適当なものを取ってきた。

2D Convolution(2次元畳み込み)


import cv2
import numpy as np
from matplotlib import pyplot as plt

# 画像をそのまま読み込む
img = cv2.imread('G-symbol.png')

# すべての要素が浮動小数点1の5×5の行列を作成、平均を出すために25で割る
# このカーネルさえ自作できれば、いろいろなフィルターが自作できる
kernel = np.ones((5,5),np.float32)/25
# kernelをそのまま適用する。ビット深度はそのまま
dst = cv2.filter2D(img,-1,kernel)

# 横に1行で2つならべ、1つ目なので(1, 2, 1)
# subplot(121)はsubplot(1, 2, 1)と同じ
plt.subplot(121),plt.imshow(img),plt.title('Original')
# x,y軸のメモリなし
plt.xticks([]), plt.yticks([])
# 横に1行で2つならべ、2つ目なので(1, 2, 2)
plt.subplot(122),plt.imshow(dst),plt.title('Averaging')
# x,y軸のメモリなし
plt.xticks([]), plt.yticks([])

# 画像表示
plt.show()


Averaging(平均)


import cv2
from matplotlib import pyplot as plt

# 画像をそのまま読み込む
img = cv2.imread('G-symbol.png')

# 平均値ぼかし処理。今回の場合2Dフィルタと同じ処理になる。
blur = cv2.blur(img,(5,5))

plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(blur),plt.title('Blurred')
plt.xticks([]), plt.yticks([])
plt.show()                                                                         


Gaussian Blurring(ガウシアンぼかし)


import cv2
from matplotlib import pyplot as plt

img = cv2.imread('G-symbol.png')

# ガウシアンぼかし(5, 5)は中心からの計算するピクセル範囲
# ガウシアンの場合は自動的に中心に近いほど近傍値としての重みが高くなり平滑化される
blur = cv2.GaussianBlur(img,(5,5),0)

plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(blur),plt.title('Blurred')
plt.xticks([]), plt.yticks([])
plt.show()


Median Blurring(中央値ぼかし)


import cv2
from matplotlib import pyplot as plt

img = cv2.imread('ZebraWithAttachedShadow_noisy_Salt_and_Pepper.jpg')

# 指定した範囲内でのピクセル数の平均値をとる。
# 白、黒などの極端なノイズは無視されるため、ノイズ除去に強い
median = cv2.medianBlur(img,5)

plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(median),plt.title('Median')
plt.xticks([]), plt.yticks([])
plt.show()


Bilateral Filtering(バイラテラルフィルタ)


import cv2
from matplotlib import pyplot as plt

img = cv2.imread('woos4.jpg')

# 入力画像、中心部からのピクセル範囲、カラーシグマ値、空間シグマ値
# カラーシグマが大きいとピクセル間での濃淡差が大きくないと効果がでない
# 空間シグマが大きいと輪郭意外のボケがおおきくなるが計算処理に時間がかかる
blur = cv2.bilateralFilter(img,9,75,75)

plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(blur),plt.title('Bilateral')
plt.xticks([]), plt.yticks([])
plt.show()


今日の作業

スムージングの特徴をもう少し明確につかみたい。

2015年11月12日木曜日

OpenCV Tutorial(1)〜特定色のトラッキング

このエントリーをはてなブックマークに追加
OpenCVのサイトにオンラインドキュメントでチュートリアルがあったので、ざっと眺めてためそうと思う。使う言語はCではなくpythonにしてみる。(慣れてるし)

Image Processing in OpenCVから。

Changing Colorspaces

import cv2
import numpy as np

cap = cv2.VideoCapture(0)

while(1):

    # Take each frame
    _, frame = cap.read()

    # Convert BGR to HSV
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

    # define range of blue color in HSV
    lower_blue = np.array([110,50,50])
    upper_blue = np.array([130,255,255])

    # Threshold the HSV image to get only blue colors
    mask = cv2.inRange(hsv, lower_blue, upper_blue)

    # Bitwise-AND mask and original image
    res = cv2.bitwise_and(frame,frame, mask= mask)

    cv2.imshow('frame',frame)
    cv2.imshow('mask',mask)
    cv2.imshow('res',res)
    k = cv2.waitKey(5) & 0xFF
    if k == 27:
        break

cv2.destroyAllWindows()

青色でマスクされた部分が動画でトラッキングされながらグレースケールと青のみでマスクされて表示された。


今日の作業

Bloggerのデザイン微修正とOpenCVのチュートリアル見つけて1つのみ。残念。あと、ソースにコメントを付けて補足したい。

2015年11月11日水曜日

画像の特徴点を抽出する

このエントリーをはてなブックマークに追加
せっかく入れたOpenCVなので何かやってみたい。

といってもパッと難しいことはできないので、よくある画像の特徴点抽出をやってみようかと思った。
import numpy as np
import cv2
from matplotlib import pyplot as plt

img = cv2.imread('/usr/local/src/opencv-3.0.0/samples/data/lena.jpg',0)

# Initiate STAR detector
orb = cv2.ORB_create()

# find the keypoints with ORB
kp = orb.detect(img,None)

# compute the descriptors with ORB
kp, des = orb.compute(img, kp)

# draw only keypoints location,not size and orientation
img2 = cv2.drawKeypoints(img,kp, None,color=(0,255,0))
plt.imshow(img2),plt.show()

出来た。

今日の作業

OpenCVのインストールが手強すぎて、あまり他のことに時間が割けなかった。とはいえ、OpenCV入れたので何ができるかの基本は押さえておきたい。明日は少し進展できたらいいな。