1. 程式人生 > 其它 >ROI區域操作與泛紅填充

ROI區域操作與泛紅填充

'''
ROI(region of interest),
也就是感興趣區域,如果你設定了影象了ROI,
那麼在使用OpenCV的函式的時候,會只對ROI區域操作,
其他區域忽略。
'''
import cv2 as cv
import numpy as np


# 擷取圖片中的指定區域或在指定區域新增某一圖片
def jie_image(src1):
    # 擷取第5行到89行的第500列到630列的區域
    src2 = src1[20:100,500:700]
    cv.imshow('intercept',src2) # 擷取圖片
    src1[105:185,300:500] = src2  # 指定位置填充,大小要一樣才能填充
    cv.imshow('composite',src1) # 合成圖片

# 指定顏色替換
def fill_image(image):
    copyImage = image.copy() # 複製原影象
    h,w = copyImage.shape[:2] # 讀取影象的寬和高
   # 注意是uint8,是不Unit8
    mask = np.zeros([h+2,w+2],np.uint8) #新建影象矩陣  +2是官方函式要求
    # 泛洪填充7個引數,夠頭疼的
    cv.floodFill(copyImage, mask, (0, 80), (0, 100, 255), (100, 100, 50), (50, 50, 50), cv.FLOODFILL_FIXED_RANGE)
    '''
     floodFill( 1.操作的影象, 2.掩模, 3.起始畫素值,4.填充的顏色, 5.填充顏色的低值, 6.填充顏色的高值 ,7.填充的方法

    引數5.填充顏色的低值就是:引數3 減去 引數5

    引數6.填充顏色的高值就是:引數3 加上 引數6

    即是這兩個數值之間的色素替換為引數4的顏色

    
    '''
    cv.imshow('floodFill',copyImage)

# 指定位置填充
def fill_binary():
    # 建立一張400*400的黑圖
    image = np.zeros([400,400,3],np.uint8)
    image[50:350,50:350,:] = 255
    cv.imshow('original',image)

    # mask的大小一定比原圖大2
    #注意是uint8,是不Unit8 同樣的錯誤一般還會再犯
    mask = np.ones([402,402,1],np.uint8)
    # 將下面的區域賦值為0
    mask[103:301,101:301] = 0
    # 進行指定位置填充
    cv.floodFill(image,mask,(200, 200), (0, 0, 255),(10,10,10),(10, 10, 10), cv.FLOODFILL_MASK_ONLY)
    cv.imshow('floodFill2',image)


if __name__ == '__main__':
    '''
    ROI切片填充
    '''
    # src = cv.imread('pic/bizhi.jpg')
    # cv.imshow('original',src)
    # jie_image(src)
    # cv.waitKey(0)
    # cv.destroyAllWindows()

    '''
    泛洪填充fill_image()
    '''
    # src = cv.imread('pic/bizhi.jpg')
    # cv.imshow('original',src)
    # fill_image(src)
    # cv.waitKey(0)
    # cv.destroyAllWindows()

    '''
    指定位置填充fill_binary()
    '''
    fill_binary()
    cv.waitKey(0)
    cv.destroyAllWindows()

努力拼搏吧,不要害怕,不要去規劃,不要迷茫。但你一定要在路上一直的走下去,儘管可能停滯不前,但也要走。