Opencv学習ノート——画像処理の入門基礎

31275 ワード

画像処理の基本
  • の画像は、画素からなる
  • である.
  • 画像分類:
  • 二値画像:各画素非黒、すなわち白
  • 階調画像:0-255
  • 画素値
  • RGB画像:3チャネルの画素値はいずれも0-255
  • である.
  • opencvにおけるカラー画像のチャネル順はBGR
  • である.
    ピクセル処理
    ピクセルの読み取り
  • 戻り値=画像[位置パラメータ]
  • 階調画像は、階調値
  • を返す.
    p = img[88,142]
    
  • BGR画像は、B,G,Rの値
  • に戻る.
    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)
    
  • BGR画像は、B,G,Rの値
  • を返す.
    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()