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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

OpenCV(十二)漫水填充算法

發布時間:2023/11/27 生活经验 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenCV(十二)漫水填充算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

一、基礎理論

1、概述

2、API

二、實戰

1、黑白圖像填充(python)

1、對內部填充

2、對外部填充

總代碼

?2、彩圖填充(C++)


一、基礎理論

1、概述

????????自動選中了和種子點相連的區域,接著將該區域替換成指定的顏色,這是個非常有用的功能,經常用來標記或者分離圖像的一部分進行處理或分析.漫水填充也可以用來從輸入圖像獲取掩碼區域,掩碼會加速處理過程,或者只處理掩碼指定的像素點。

2、API

python:

cv2.floodFill(image, mask, seedPoint, newVal, loDiff=None, upDiff=None, flags=None)

image: 輸入圖片
mask: 掩碼, 比 image 長寬高 2
seedPoint: 泛洪算法的起始點
newVal: 重繪區域的新值 (顏色)
loDiff: seePoint - loDiff 下限
upDiff: seePoint - upDiff 上限
flags: 操作標志符
????????LOODFILL_FIXED_RANGE: 改變圖像, 泛洪填充
????????FLOODFILL_MASK_ONLY: 不改變圖像, 只填充 mask 本身, 忽略新的顏色值參數

cv2.floodFill(img, mask,             (100, 200), (255, 0, 0), (30, 30, 30), (50, 50, 50), cv2.FLOODFILL_FIXED_RANGE)#             掩碼(長寬=原圖長寬+2) 泛洪算法起點  填充顏色      下限           上限          填充方式

C++:?

 int floodFill(InputOutputArray image, Point seedPoint, Scalar newVal, Rect* rect=0, Scalar loDiff=Scalar(), Scalar upDiff=Scalar(), int flags=4 )
floodFill(src, Point(10, 10), Scalar(255, 255, 0), &ccomp, Scalar(10, 10, 10), Scalar(10, 10, 10));
//			    起始點		  顏色				 最小邊界矩形  負差最大值			正差最大值

二、實戰

1、黑白圖像填充(python)

1、對內部填充

(注:坐標不固定,根據自己需要確定填充坐標)

# 漫水填充
def flood_fill():# 獲取高寬h, w = img.shape[:2]     #即shape[0:2],shape的0~2print(h,w)# 創建掩碼(長、寬必須比原圖大2)mask = np.zeros([h+2, w+2], np.uint8)# 漫水填充(泛洪)cv2.floodFill(img, mask,             (100, 200), (255, 0, 0), (30, 30, 30), (50, 50, 50), cv2.FLOODFILL_FIXED_RANGE)#                 掩碼(長寬=原圖長寬+2) 泛洪算法起點  填充顏色      下限           上限          填充方式# 圖片展示cv2.imshow("flood_fill", img)

?

2、對外部填充

只需要把填充的坐標由(100, 200)修改成(200, 200)即可完成填充。

(注:坐標不固定,根據自己需要確定填充坐標)

cv2.floodFill(img, mask,             (200, 200), (255, 0, 0), (30, 30, 30), (50, 50, 50), cv2.FLOODFILL_FIXED_RANGE)

?

?再修改坐標,把小塊填充上:

cv2.floodFill(img, mask, (200, 320), (255, 0, 0), (30, 30, 30), (50, 50, 50), cv2.FLOODFILL_FIXED_RANGE)

總代碼

# 漫水填充(泛洪)
import numpy as np
import cv2# 漫水填充
def flood_fill():# 獲取高寬h, w = img.shape[:2]     #即shape[0:2],shape的0~2print(h,w)# 創建掩碼(長、寬必須比原圖大2)mask = np.zeros([h+2, w+2], np.uint8)# 漫水填充(泛洪)# cv2.floodFill(img, mask,             (100, 200), (255, 0, 0), (30, 30, 30), (50, 50, 50), cv2.FLOODFILL_FIXED_RANGE)# cv2.floodFill(img, mask,             (200, 200), (255, 0, 0), (30, 30, 30), (50, 50, 50), cv2.FLOODFILL_FIXED_RANGE)cv2.floodFill(img, mask, (200, 320), (255, 0, 0), (30, 30, 30), (50, 50, 50), cv2.FLOODFILL_FIXED_RANGE)#                 掩碼(長寬=原圖長寬+2) 泛洪算法起點  填充顏色      下限           上限          填充方式# 圖片展示cv2.imshow("flood_fill", img)if __name__ == "__main__":# 讀取圖片img = cv2.imread("Resource/test8.jpg")cv2.imshow('img', img)# 獲取泛洪圖像flood_fill = flood_fill()cv2.waitKey(0)

?2、彩圖填充(C++)

//漫水填充
#include <iostream>
#include <opencv2/opencv.hpp>using namespace cv;
using namespace std;Mat src;//圖像初始化
void Image_Init()
{src = imread("Resource/test.jpg");					//讀取if (src.empty()){printf("could not load the picture...");}
}int main()
{Image_Init();						//圖像初始化imshow("原圖", src);Rect ccomp;floodFill(src, Point(10, 10), Scalar(255, 255, 0), &ccomp, Scalar(10, 10, 10), Scalar(10, 10, 10));//				起始點			顏色			最小邊界矩形	 負差最大值			正差最大值imshow("填充圖", src);waitKey(0);return 0;
}

效果

參考資料

https://iamarookie.blog.csdn.net/article/details/119089829

總結

以上是生活随笔為你收集整理的OpenCV(十二)漫水填充算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。