Opencv学習ノート——画像処理の入門基礎
画像処理の基本の画像は、画素からなる である.画像分類: 二値画像:各画素非黒、すなわち白 階調画像:0-255 画素値 RGB画像:3チャネルの画素値はいずれも0-255 である.
opencvにおけるカラー画像のチャネル順はBGR である.
ピクセル処理
ピクセルの読み取り戻り値=画像[位置パラメータ] 階調画像は、階調値 を返す. BGR画像は、B,G,Rの値 に戻る.
ピクセルの変更
適用
numpy画素処理
ピクセルの読み取り
戻り値=画像.item(位置パラメータ)階調画像は、階調値 を返す. BGR画像は、B,G,Rの値 を返す.
ピクセルの変更
画像名itemset(場所、新しい値)
適用
画像のプロパティの取得
イメージシェイプ
shapeは画像の形状を取得し,行数,列数,チャネル数を含むメタグループを返すことができる.階調 は行数、列数 を返します.
カラー は、行数、列数、チャネル数 を返します.
ピクセル数
sizeは画像の画素数を取得できます階調 は、行数*列数 を返します.
カラー: は、行数*列数*チャネル数 を返します.
データ型
dtypeは画像のデータ型を取得できます
適用
画像ROI
ROI(region of interest)、興味領域
処理された画像から、処理が必要な領域をボックス、円、楕円、不規則多角形などで描画する
興味領域ROIは、各種演算子(Operator)や関数で求め、画像の次の処理を行うことができます
適用
チャネル分割とマージ
チャネルの分割
チャネルのマージ(Merge Channel)
適用
ピクセル処理
ピクセルの読み取り
p = img[88,142]
blue = img[18, 125, 0]
green = img[78, 125, 1]
red = img[78, 125, 2]
p = [78, 125] # [78, 125]
ピクセルの変更
#
img[88, 99] = 255
# BGR
img[88, 99] = [255, 255, 255]
適用
import cv2
gray = cv2.imread('image/gray.jpg', cv2.IMREAD_UNCHANGED)
print('gray[100, 100]:', gray[100, 100])
gray[100, 100] = 255
print('gray[100, 100]:', gray[100, 100])
color = cv2.imread('image/color.jpg', cv2.IMREAD_UNCHANGED)
print('color[100, 100]:', color[100, 100])
color[100, 100] = [255, 255, 255]
print('color[100, 100]:', color[100, 100])
cv2.imshow('color', color)
color[100:150, 100:150] = [255, 255, 255]
cv2.imshow('dst', color)
cv2.waitKey(0)
cv2.destroyAllWindows()
numpy画素処理
ピクセルの読み取り
戻り値=画像.item(位置パラメータ)
pix = img.item(88, 142)
blue = img.item(78, 125, 0)
green = img.item(78, 125, 1)
red = img.item(78, 125, 2)
ピクセルの変更
画像名itemset(場所、新しい値)
#
img.itemset((88, 99), 255)
# BGR
img.itemset((88, 99, 0), 255)
img.itemset((88, 99, 1), 255)
img.itemset((88, 99, 2), 255)
適用
import cv2
import numpy as np
#
gray = cv2.imread('image/gray.jpg', cv2.IMREAD_UNCHANGED)
print('gray.item(100, 100):', gray.item(100, 100))
gray.itemset((100, 100), 255)
print('gray.item(100, 100):', gray.item(100, 100))
# BGR
color = cv2.imread('image/color.jpg', cv2.IMREAD_UNCHANGED)
print('color.item(100, 100, 0):', color.item(100, 100, 0))
color.itemset((100, 100, 0), 255)
print('color.item(100, 100, 0):', color.item(100, 100, 0))
print('color.item(100, 100, 1):', color.item(100, 100, 1))
color.itemset((100, 100, 1), 255)
print('color.item(100, 100, 1):', color.item(100, 100, 1))
print('color.item(100, 100, 2):', color.item(100, 100, 2))
color.itemset((100, 100, 2), 255)
print('color.item(100, 100, 2):', color.item(100, 100, 2))
画像のプロパティの取得
イメージシェイプ
shapeは画像の形状を取得し,行数,列数,チャネル数を含むメタグループを返すことができる.
img.shape
ピクセル数
sizeは画像の画素数を取得できます
img.size
データ型
dtypeは画像のデータ型を取得できます
img.dtype
適用
import cv2
gray = cv2.imread('image/gray.jpg', cv2.IMREAD_UNCHANGED)
color = cv2.imread('image/color.jpg', cv2.IMREAD_UNCHANGED)
print('gary.shape:', gray.shape)
print('color.shape:', color.shape)
print('gray.size:', gray.size)
print('color.size:', color.size)
print('gray.dtype:', gray.dtype)
print('color.dtype:', color.dtype)
画像ROI
ROI(region of interest)、興味領域
処理された画像から、処理が必要な領域をボックス、円、楕円、不規則多角形などで描画する
興味領域ROIは、各種演算子(Operator)や関数で求め、画像の次の処理を行うことができます
img[200:400, 200:400]
適用
import cv2
import numpy as np
color = cv2.imread('image/color.jpg') #
roi = color[50:200, 800:950] # ROI
cv2.imshow('roi', roi)
color[0:150, 0:150] = roi #
cv2.imshow('color', color)
test = cv2.imread('image/test.jpg') #
test[0:150, 0:150] = roi #
cv2.imshow('test',test)
cv2.waitKey(0)
cv2.destroyAllWindows()
チャネル分割とマージ
チャネルの分割
b = img[:, :, 0]
g = img[:, :, 1]
r = img[:, :, 2]
b,g,r = cv2.split(img)
b = cv2.split(img)[0]
g = cv2.split(img)[1]
r = cv2.split(img)[2]
チャネルのマージ(Merge Channel)
img = cv2.merge([b, g, r])
適用
import cv2
import numpy as np
color = cv2.imread('image/color.jpg')
b, g, r = cv2.split(color) #
cv2.imshow('color', color)
cv2.imshow('b', b)
cv2.imshow('g', g)
cv2.imshow('r', r)
m = cv2.merge([b, g, r]) #
cv2.imshow('merge', m)
weight, high = color.shape[0:2]
b = cv2.split(color)[0]
g = np.zeros((weight, high), color.dtype)
r = np.zeros((weight, high), color.dtype)
m = cv2.merge([b, g, r])
cv2.imshow('meger1',m)
cv2.waitKey(0)
cv2.destroyAllWindows()