日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

OpenCV之ROI和泛洪填充

發(fā)布時(shí)間:2023/12/29 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenCV之ROI和泛洪填充 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、獲取RIO區(qū)域
?

import cv2 as cv import numpy as np print("----------hello python----------") src = cv.imread(r"D:\project\py_opencv\gyy.png") cv.namedWindow("input image", cv.WINDOW_AUTOSIZE) cv.imshow("input image", src)face = src[30:220, 150:320] gray = cv.cvtColor(face, cv.COLOR_BGR2GRAY) backface = cv.cvtColor(gray, cv.COLOR_GRAY2BGR) src[30:220, 150:320] = backface cv.imshow("face", src) cv.waitKey(0) cv.destroyAllWindows()

二、泛洪填充

泛洪算法——floodFill函數(shù)原型
cv2.floodFill(img,mask,seed,newvalue(BGR),(loDiff1,loDiff2,loDiff3),(upDiff1,upDiff2,upDiff3),flag)

img:為待使用泛洪算法的圖像

mask:為掩碼層,使用掩碼可以規(guī)定是在哪個(gè)區(qū)域使用該算法,如果是對(duì)于完整圖像都要使用,則掩碼層大小為原圖行數(shù)+2,列數(shù)+2.是一個(gè)二維的0矩陣,邊緣一圈會(huì)在使用算法是置為1。而只有對(duì)于掩碼層上對(duì)應(yīng)為0的位置才能泛洪,所以掩碼層初始化為0矩陣。【dtype:np.uint8】

seed:為泛洪算法的種子點(diǎn),也是根據(jù)該點(diǎn)的像素判斷決定和其相近顏色的像素點(diǎn),是否被泛洪處理。

newvalue:是對(duì)于泛洪區(qū)域新賦的值(B,G,R)

(loDiff1,loDiff2,loDiff3):相對(duì)于seed種子點(diǎn)像素可以往下的像素值,seed(B0,G0,R0),泛洪區(qū)域下界為(B0-loDiff1,G0-loDiff2,R0-loDiff3)

(upDiff1,upDiff2,upDiff3):相對(duì)于seed種子點(diǎn)像素可以往上的像素值,seed(B0,G0,R0),泛洪區(qū)域上界為(B0+upDiff1,G0+upDiff2,R0+upDiff3)

flags: 操作標(biāo)志符,為泛洪算法的處理模式,包含二部分:
低八位(0~ 7位):用于控制算法的連通性,可取4(默認(rèn))或8
高八位(16~ 32位):可以為0或者如下兩種標(biāo)志符的組合:
FLOODFILL FIXED_ RANGE:設(shè)置此標(biāo)志符會(huì)考慮當(dāng)前像素與種子像素之間的差,否則就考慮當(dāng)前像素與其相鄰像素的差
FLOODFILL MASK_ ONLY:設(shè)置此標(biāo)志符,函數(shù)不會(huì)去填充改變?cè)紙D像(即忽略第三個(gè)參數(shù)newVal),而去填充掩碼圖像mask
中間八位(8~ 15位):用于指定填充掩碼圖像的值,但是如果中間/ \位為0則掩碼用1來(lái)填充

低八位?控制算法的連通性,是以seed點(diǎn)為中心,接著判斷周圍的幾個(gè)像素點(diǎn),再將泛洪區(qū)域像素點(diǎn)周圍的幾個(gè)像素點(diǎn)進(jìn)行考慮。?一般為4,8;默認(rèn)為4
中間八位?與掩碼層賦值密切相關(guān),一般使用(255<<8)使中間8位全位1,則值為255,也就是掩碼層對(duì)應(yīng)原圖的泛洪區(qū)域的部分被由原來(lái)的初值0賦值成255,如果中間8位為0,則賦值為1.
高八位?由opencv宏參數(shù)指定

cv2.FLOODFILL_FIXED_RANGE:改變圖像,填充newvalue
?cv2.FLOODFILL_MASK_ONLY:不改變?cè)瓐D像,也就是newvalue參數(shù)失去作用,而是改變對(duì)應(yīng)區(qū)域的掩碼,設(shè)為中間八位的值

代碼實(shí)操

import cv2 as cv import numpy as npdef fill_color_demo(image):copyImg = image.copy()h, w = image.shape[:2]"""mask:為掩碼層,使用掩碼可以規(guī)定是在哪個(gè)區(qū)域使用該算法如果是對(duì)于完整圖像都要使用,則掩碼層大小為原圖行數(shù)+2,列數(shù)+2.是一個(gè)二維的0矩陣,邊緣一圈會(huì)在使用算法是置為1。而只有對(duì)于掩碼層上對(duì)應(yīng)為0的位置才能泛洪,所以掩碼層初始化為0矩陣。"""mask = np.zeros([h+2, w+2], np.uint8) #mask必須是單通道8位#泛洪區(qū)域下界為(B0-loDiff1,G0-loDiff2,R0-loDiff3)#泛洪區(qū)域上界為(B0 + upDiff1, G0 + upDiff2, R0 + upDiff3)#a,b,c = image[30,30,:] ==> (a-100,b-100,c-100)到(a+50, b+50, c+50)之間的像素值全部變成(0,255,255)cv.floodFill(copyImg, mask, (30, 30), (0, 255, 255), (100, 100, 100), (50, 50, 50), flags=cv.FLOODFILL_FIXED_RANGE)cv.imshow("fill_color_demo", copyImg)def fill_binary():image = np.zeros([400, 400, 3], np.uint8)image[100:300, 100:300, :] = 255cv.imshow("fill_binary", image)mask = np.ones([402, 402, 1], np.uint8)mask[101:301, 101:301] = 0cv.floodFill(image, mask, (200, 200), (100, 2, 255), cv.FLOODFILL_MASK_ONLY)cv.imshow("filled_binary", image) print("----------hello python----------") src = cv.imread("gyy.png") cv.namedWindow("input image", cv.WINDOW_AUTOSIZE) cv.imshow("input image", src) fill_color_demo(src) fill_binary() cv.waitKey(0) cv.destroyAllWindows()

總結(jié)

以上是生活随笔為你收集整理的OpenCV之ROI和泛洪填充的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。