ラベル OpenCV の投稿を表示しています。 すべての投稿を表示
ラベル OpenCV の投稿を表示しています。 すべての投稿を表示

2015年3月18日水曜日

[Python][OpenCV]OpenCVで余白削除

# -*- coding:utf-8 -*-
import cv2

img = cv2.imread('test.png')
img2 = cv2.imread('test.png')

# Grayscale に変換
img2 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 結果を表示
#cv2.imshow('img', img)
#cv2.imshow('img2', img2)

# 2 値化
ret, thresh = cv2.threshold(img2, 250, 255, cv2.THRESH_BINARY)
#cv2.imshow('thresh', thresh)

# 輪郭を取得
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

# i = 1 は画像全体の外枠になるのでカウントに入れない
x1 = []
y1 = []
x2 = []
y2 = []
for i in range(1, len(contours)):
    # ret の中身は (x, y, w, h)
    ret = cv2.boundingRect(contours[i])
    x1.append(ret[0])
    y1.append(ret[1])
    x2.append(ret[0] + ret[2])
    y2.append(ret[1] + ret[3])

x1_min = min(x1)
y1_min = min(y1)
x2_max = max(x2)
y2_max = max(y2)
cv2.rectangle(img, (x1_min, y1_min), (x2_max, y2_max), (0, 255, 0), 2)
cv2.imshow('img', img)
cv2.imwrite('test_cropRectangle.png', img)

crop_img = img2[y1_min:y2_max, x1_min:x2_max]
cv2.imshow('crop_img', crop_img)
cv2.imwrite('test_cropped.png', crop_img)

cv2.waitKey(0)
cv2.destroyAllWindows()
元画像

全画像の外枠検出結果

余白削除結果

[Python][OpenCV]画像の上下左右を削除(trim)する

# -*- coding:utf-8 -*-
import cv2

img = cv2.imread('BunkoSample_noise.jpg')
height, width = img.shape[:2]

offset = 100
# 開始座標
x = offset # 横座標(左起点)
y = offset # 縦座標(上起点)
# crop する画像サイズ
w = width - offset * 2
h = height - offset * 2
crop_img = img[y:y+h, x:x+w]
# IMWRITE_JPEG_QUALITY を指定しない時 (default) と quality = 95 は同じサイズになる
cv2.imwrite('cropped_default.jpg', crop_img)
cv2.imwrite('cropped_95.jpg', crop_img, [cv2.IMWRITE_JPEG_QUALITY, 95])
cv2.imwrite('cropped_75.jpg', crop_img, [cv2.IMWRITE_JPEG_QUALITY, 75])
cv2.imwrite('cropped_60.jpg', crop_img, [cv2.IMWRITE_JPEG_QUALITY, 60])
cv2.imwrite('cropped_50.jpg', crop_img, [cv2.IMWRITE_JPEG_QUALITY, 50])
cv2.imwrite('cropped_30.jpg', crop_img, [cv2.IMWRITE_JPEG_QUALITY, 30])
元画像(左上と右下にゴミ線が入っている)

上下左右を100dotずつ削った結果

出力されたファイルサイズ
$ ls -l
-rw-rw-r-- 1 xxxx xxxx 283451  3月 18 13:58 BunkoSample_noise.jpg
-rw-rw-r-- 1 xxxx xxxx 238097  3月 18 22:59 cropped_30.jpg
-rw-rw-r-- 1 xxxx xxxx 277427  3月 18 22:59 cropped_50.jpg
-rw-rw-r-- 1 xxxx xxxx 296614  3月 18 22:59 cropped_60.jpg
-rw-rw-r-- 1 xxxx xxxx 341120  3月 18 22:59 cropped_75.jpg
-rw-rw-r-- 1 xxxx xxxx 575140  3月 18 22:59 cropped_95.jpg
-rw-rw-r-- 1 xxxx xxxx 575140  3月 18 22:59 cropped_default.jpg

[Python][OpenCV]Python用OpenCVのインストール

Ubuntu ソフトウェアセンターで以下のものをインストールする
  • python-opencv

[Python][OpenCV]画像サイズを取得

# -*- coding:utf-8 -*-
import cv2

img = cv2.imread('test.jpg')
print "img.shape=", img.shape
height, width = img.shape[:2]
print "height=", height
print "width=", width
実行結果
$ python getImageSize.py 
img.shape= (1802, 1150, 3)
height= 1802
width= 1150