基礎ユニット2(イメージメディア) 第9回(2018/12/06)

関連サイトと資料

サンプル画像

croatia.png

airfield.png

alps.png

ireland.png

imgA.png

imgB.png

imgC.png

flowers.png

サンプルプログラム

histogram1.py
import cv2
	
# パラメータ
target = 'croatia.png'
	
# ヒストグラムの算出
img = cv2.imread(target, cv2.IMREAD_GRAYSCALE)
height, width = img.shape
hist = cv2.calcHist([img], [0], None, [256], [0, 256])
	
# 表示
print('ピクセル値 -> 頻度')
sum = 0
for i in range(256):
    print('{0} -> {1}'.format(i, int(hist[i][0])))
    sum += int(hist[i][0])
	
total = width * height
print('全ピクセル数: {0}'.format(total))
print('頻度の総和: {0}'.format(sum))

histogram2.py
import cv2
	
# パラメータ
target = 'croatia.png'
	
# ヒストグラムの算出
img = cv2.imread(target, cv2.IMREAD_GRAYSCALE)
height, width = img.shape
hist = cv2.calcHist([img], [0], None, [64], [0, 256])
	
# 表示
print('ピクセル値(下限,上限) -> 頻度')
sum = 0
for i in range(64):
    print('({0},{1}) -> {2}'.format(i*4, (i+1)*4 - 1, int(hist[i][0])))
    sum += int(hist[i][0])
	
total = width * height
print('全ピクセル数: {0}'.format(total))
print('頻度の総和: {0}'.format(sum))

histogram3.py
import cv2
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
	
# パラメータ
target = 'croatia.png'
	
# ヒストグラムの算出
img = cv2.imread(target, cv2.IMREAD_GRAYSCALE)
height, width = img.shape
hist = cv2.calcHist([img], [0], None, [256], [0, 256])
	
# 表示
fp = FontProperties(fname=r'C:\\WINDOWS\\Fonts\\msgothic.ttc', size=12)
val_x = []
val_y = []
for i in range(256):
    val_x.append(i)
    val_y.append(int(hist[i][0]))
	
plt.bar(np.array(val_x), np.array(val_y), color="#FF0000")
plt.title(u'ヒストグラム({0})'.format(target), fontproperties=fp)
plt.xlabel(u'ピクセル値', fontproperties=fp)
plt.ylabel(u'頻度', fontproperties=fp)
plt.show()

histogram3.pyの実行結果

histogram4.py
import cv2
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
	
# パラメータ
target = 'croatia.png'
	
# ヒストグラムの算出
img = cv2.imread(target, cv2.IMREAD_GRAYSCALE)
height, width = img.shape
hist = cv2.calcHist([img], [0], None, [64], [0, 256])
	
# 表示
fp = FontProperties(fname=r'C:\\WINDOWS\\Fonts\\msgothic.ttc', size=12)
val_x = []
val_y = []
for i in range(64):
    val_x.append(i)
    val_y.append(int(hist[i][0]))
	
plt.bar(np.array(val_x), np.array(val_y), color="#FF0000")
plt.title(u'ヒストグラム({0})'.format(target), fontproperties=fp)
plt.xlabel(u'ピクセル値', fontproperties=fp)
plt.ylabel(u'頻度', fontproperties=fp)
plt.show()

histogram4.pyの実行結果

cHistogram1.py
import cv2
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
	
# パラメータ
target = 'flowers.png'
	
# ヒストグラムの算出
img = cv2.imread(target, cv2.IMREAD_COLOR)
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
hist = cv2.calcHist([hsv], [0], None, [180], [0, 180])
	
# 表示
fp = FontProperties(fname=r'C:\\WINDOWS\\Fonts\\msgothic.ttc', size=12)
val_x = []
val_y = []
for i in range(180):
    val_x.append(i)
    val_y.append(int(hist[i][0]))
	
plt.bar(np.array(val_x), np.array(val_y), color="#FF0000")
plt.title(u'ヒストグラム({0})'.format(target), fontproperties=fp)
plt.xlabel(u'ピクセル値(hue)', fontproperties=fp)
plt.ylabel(u'頻度', fontproperties=fp)
plt.show()

cHistogram1.pyの実行結果

createColorBar1.py
import cv2
import numpy as np
	
filename = 'cbar1.png'
x, y, w, h = 112, 506, 449, 30
img = np.full((h, w, 3), (0, 0, 255), dtype = np.uint8)
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
	
for x in range(w):
    hue = int(x * 179 / w)
    for y in range(h):
        hsv[y, x, 0] = hue
	
img2 = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)
cv2.imwrite(filename, img2)
cv2.imshow('test', img2)
	
cv2.waitKey(0)
cv2.destroyAllWindows()

createColorBar1.pyによって作成されたcbar1.png

embedColorBar1.py
import cv2
	
targetGraph = 'cHistogram1.png'
targetCBar = 'cbar1.png'
x, y = 112, 506
saveGraph = 'cHistogram1_cbar.png'
	
imgGraph = cv2.imread(targetGraph, cv2.IMREAD_COLOR)
imgCBar = cv2.imread(targetCBar, cv2.IMREAD_COLOR)
h, w, _ = imgCBar.shape
	
imgGraph2 = imgGraph.copy()
imgGraph2[y:y+h, x:x+w] = imgCBar
	
cv2.imwrite(saveGraph, imgGraph2)
cv2.imshow('Graph', imgGraph)
cv2.imshow('Color Bar', imgCBar)
cv2.imshow('Graph with Color Bar', imgGraph2)
	
cv2.waitKey(0)
cv2.destroyAllWindows()

embedColorBar1.pyによって作成されたcHistogram1_cbar.png

cutROI1.py
import cv2
	
target = 'flowers.png'
x, y, w, h = 383, 108, 109, 199
saveRect = 'flowers_rect.png'
saveROI = 'flowers_roi.png'
	
orgImg = cv2.imread(target, cv2.IMREAD_COLOR)
rectImg = orgImg.copy()
cv2.rectangle(rectImg, (x,y), (x+w,y+h), (0,0,0), 2)
roiImg = orgImg[y:y+h, x:x+w]
	
cv2.imwrite(saveRect, rectImg)
cv2.imwrite(saveROI, roiImg)
	
cv2.imshow('ROI depicted with rectangle', rectImg)
cv2.imshow('ROI', roiImg)
	
cv2.waitKey(0)
cv2.destroyAllWindows()

cutROI1.pyによって作成されたflowers_rect.png

cutROI1.pyによって作成されたflowers_roi.png

ROIに対して作成されたカラーバー付きヒストグラムのグラフ

cHistogram3.py
import cv2
	
# パラメータ
ROI = 'flowers_roi.png'
target = 'flowers.png'
saveBP = 'flowers_result.png'
	
# ROIのヒストグラムの算出
roiImg = cv2.imread(ROI, cv2.IMREAD_COLOR)
roiHSV = cv2.cvtColor(roiImg, cv2.COLOR_BGR2HSV)
roiHist = cv2.calcHist([roiHSV], [0], None, [180], [0, 180])
cv2.normalize(roiHist, roiHist, 0, 255, cv2.NORM_MINMAX)
	
# ROIと同じようなヒストグラムを有する確率を抽出
img = cv2.imread(target, cv2.IMREAD_COLOR)
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
dst = cv2.calcBackProject([hsv],[0], roiHist, [0, 180], 1)
	
cv2.imwrite(saveBP, dst)
cv2.imshow('Original', img)
cv2.imshow('Result', dst)
	
cv2.waitKey(0)
cv2.destroyAllWindows()

cHistogram3.pyの結果