OpenCV圖片操作100例:從入門到精通指南(2)

接上篇,本文將繼續分享OpenCV實用技巧,涵蓋圖像處理、目標檢測、3D視覺等進階領域!

六、圖像變換進階

17. 圖像金字塔

# 高斯金字塔下采樣
smaller = cv2.pyrDown(img)# 高斯金字塔上采樣
larger = cv2.pyrUp(img)

用于多尺度圖像處理,構建圖像金字塔

18. 極坐標變換

polar = cv2.warpPolar(img, (300,300), (w//2, h//2), radius, cv2.WARP_POLAR_LINEAR
)

實現直角坐標系與極坐標系轉換

19. 非均勻縮放

M = np.float32([[1, 0.5, 0], [0, 1, 0]])
sheared = cv2.warpAffine(img, M, (int(w*1.5), h))

實現圖像剪切變形效果

20. 網格扭曲效果

map_x = np.zeros(img.shape[:2], np.float32)
map_y = np.zeros(img.shape[:2], np.float32)
# 創建網格扭曲映射...
distorted = cv2.remap(img, map_x, map_y, cv2.INTER_LINEAR)

實現自定義的網格變形效果

七、形態學操作大全

21. 膨脹操作

kernel = np.ones((5,5), np.uint8)
dilated = cv2.dilate(img, kernel)

擴大亮區域,連接斷裂對象

22. 腐蝕操作

eroded = cv2.erode(img, kernel)

縮小亮區域,去除小噪點

23. 開運算

opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)

先腐蝕后膨脹,去除小物體

24. 閉運算

closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)

先膨脹后腐蝕,填充小孔洞

25. 形態學梯度

gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)

獲取物體輪廓邊緣

26. 頂帽操作

tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)

提取亮色小特征(如白紙黑字)

27. 黑帽操作

blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel)

提取暗色小特征(如黑底白點)

八、圖像濾波與增強

28. 雙邊濾波

bilateral = cv2.bilateralFilter(img, 9, 75, 75)

保持邊緣銳利的同時降噪

29. 自定義濾波核

kernel = np.array([[0,-1,0], [-1,5,-1], [0,-1,0]])
sharpened = cv2.filter2D(img, -1, kernel)

創建銳化濾波核增強細節

30. 導向濾波

# 使用PyTorch實現導向濾波更佳
# 偽代碼:guided_filter = guideFilter(guide, img, radius, eps)

保持邊緣的先進濾波技術

31. 非局部均值去噪

denoised = cv2.fastNlMeansDenoisingColored(img, None, 10, 10, 7, 21)

高效去除高斯噪聲

32. 拉普拉斯銳化

laplacian = cv2.Laplacian(img, cv2.CV_64F)
sharp = cv2.convertScaleAbs(laplacian)

增強圖像邊緣和細節

九、視頻處理技巧

33. 視頻幀讀取

cap = cv2.VideoCapture('video.mp4')
while cap.isOpened():ret, frame = cap.read()if not ret: break# 處理幀
cap.release()

34. 視頻寫入

fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi', fourcc, 20.0, (640,480))
out.write(processed_frame)
out.release()

35. 幀差分法

prev_frame = None
while True:ret, frame = cap.read()gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)if prev_frame is not None:diff = cv2.absdiff(gray, prev_frame)_, motion = cv2.threshold(diff, 30, 255, cv2.THRESH_BINARY)prev_frame = gray

檢測視頻中的運動區域

36. 背景建模

bg_subtractor = cv2.createBackgroundSubtractorMOG2()
fg_mask = bg_subtractor.apply(frame)

分離前景運動物體

十、3D視覺與相機標定

37. 棋盤格角點檢測

pattern_size = (9, 6)
ret, corners = cv2.findChessboardCorners(gray, pattern_size)
if ret:cv2.drawChessboardCorners(img, pattern_size, corners, ret)

相機標定的關鍵步驟

38. 相機標定

# 準備標定數據
obj_points = []  # 3D點
img_points = []  # 2D點# 執行標定
ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(obj_points, img_points, gray.shape[::-1], None, None
)

39. 畸變校正

undistorted = cv2.undistort(img, mtx, dist)

40. 距離測量

# 已知物體大小和焦距
focal_length = 500  # 相機焦距(像素)
known_width = 20.0  # 物體實際寬度(cm)
pixel_width = 150   # 圖像中的物體寬度(像素)
distance = (known_width * focal_length) / pixel_width

單目視覺距離測量

十一、目標檢測進階

41. HOG行人檢測

hog = cv2.HOGDescriptor()
hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())
rects, weights = hog.detectMultiScale(frame, winStride=(4,4), padding=(8,8), scale=1.05)

42. YOLO目標檢測

net = cv2.dnn.readNet("yolov3.weights", "yolov3.cfg")
blob = cv2.dnn.blobFromImage(img, 1/255, (416,416), swapRB=True, crop=False)
net.setInput(blob)
outputs = net.forward(net.getUnconnectedOutLayersNames())

43. 二維碼檢測

detector = cv2.QRCodeDetector()
data, points, _ = detector.detectAndDecode(img)
if points is not None:points = points[0].astype(int)cv2.polylines(img, [points], True, (0,255,0), 3)

十二、圖像分析與測量

44. 輪廓近似

epsilon = 0.01 * cv2.arcLength(cnt, True)
approx = cv2.approxPolyDP(cnt, epsilon, True)
cv2.drawContours(img, [approx], 0, (0,255,0), 2)

45. 最小外接矩形

rect = cv2.minAreaRect(cnt)
box = cv2.boxPoints(rect)
box = np.int0(box)
cv2.drawContours(img, [box], 0, (0,0,255), 2)

46. 最小外接圓

(x,y), radius = cv2.minEnclosingCircle(cnt)
center = (int(x), int(y))
radius = int(radius)
cv2.circle(img, center, radius, (255,0,0), 2)

47. 橢圓擬合

if len(cnt) >= 5:ellipse = cv2.fitEllipse(cnt)cv2.ellipse(img, ellipse, (0,255,0), 2)

十三、高級處理技巧

48. 圖像修復

damaged = img.copy()
mask = np.zeros(img.shape[:2], np.uint8)
# 創建受損區域...
restored = cv2.inpaint(damaged, mask, 3, cv2.INPAINT_TELEA)

49. 高動態范圍成像

# 準備不同曝光度的圖像
images = [img1, img2, img3]  
times = [0.5, 1.0, 2.0]  # 曝光時間# 合并HDR圖像
calibrate = cv2.createCalibrateDebevec()
response = calibrate.process(images, times)
merge = cv2.createMergeDebevec()
hdr = merge.process(images, times, response)

50. 圖像拼接

stitcher = cv2.Stitcher_create()
status, panorama = stitcher.stitch([img1, img2])
if status == cv2.Stitcher_OK:cv2.imshow('Panorama', panorama)

十四、實用工具集錦(51-100)

分類示例代碼功能描述
?繪圖?cv2.line(img, pt1, pt2, (0,0,255), 3)繪制直線
?繪圖?cv2.arrowedLine(img, pt1, pt2, (0,255,0), 2)繪制箭頭
?繪圖?cv2.ellipse(img, center, axes, 0,0,360, (255,0,0), 2)繪制橢圓
?計算?dist = cv2.norm(pt1, pt2)計算兩點距離
?計算?angle = cv2.fastAtan2(dy, dx)計算角度
?變換?log_trans = cv2.log(1 + img.astype(np.float32))對數變換
?分割?markers = cv2.watershed(img, markers)分水嶺分割
?分割?ret, markers = cv2.connectedComponents(binary)連通域分析
?光流?next_pts, status, err = cv2.calcOpticalFlowPyrLK(prev_gray, gray, prev_pts, None)LK光流法
?跟蹤?tracker = cv2.TrackerKCF_create()KCF跟蹤器
?顯示?cv2.displayStatusBar("Window", "Processing...", 1000)狀態欄顯示
?顯示?cv2.putText(img, "FPS: " + str(fps), (10,30), font, 1, (0,0,255), 2)顯示FPS
?優化?img_roi = cv2.UMat(img_roi)使用UMat加速
?文件?fs = cv2.FileStorage("data.yml", cv2.FILE_STORAGE_WRITE)YML文件存取
?卷積?filtered = cv2.filter2D(img, -1, kernel)自定義卷積
?統計?min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(gray)極值查找
?特征?orb = cv2.ORB_create(nfeatures=500)ORB特征點
?匹配?matcher = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)特征匹配
?顏色?lab = cv2.cvtColor(img, cv2.COLOR_BGR2Lab)轉換到Lab
?顏色?mean_color = cv2.mean(img, mask)計算均值
?二值?thresh = cv2.adaptiveThreshold(gray,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,11,2)自適應閾值
?形態?thinned = cv2.ximgproc.thinning(binary)細化操作
?積分?integral = cv2.integral(img)積分圖像
?距離?dist_transform = cv2.distanceTransform(binary, cv2.DIST_L2, 3)距離變換

完整100例速查表

類別數量代表功能
基礎操作12項讀寫、轉換、裁剪、旋轉
增強處理18項濾波、降噪、邊緣檢測
特征分析16項角點、輪廓、特征點
目標檢測10項人臉、行人、二維碼
3D視覺8項標定、畸變校正、測距
視頻處理8項讀寫、運動檢測、跟蹤
圖像變換10項仿射、透視、極坐標
實用工具18項繪圖、計算、文件操作

?關注我們并獲取更多【OpenCV100】獲取更多示例

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/88383.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/88383.shtml
英文地址,請注明出處:http://en.pswp.cn/web/88383.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2、Connecting to Kafka

KafkaAdmin-請參閱配置主題ProducerFactory-請參閱發送消息ConsumerFactory-請參閱接收消息從2.5版本開始&#xff0c;每個版本都擴展了KafkaResourceFactory。這允許在運行時通過向引導服務器的配置中添加Supplier<String>來更改引導服務器&#xff1a;setBootstrapServ…

二進制部署CentOS8.5+Kubernetes1.33.2+Docker28.3.1高可用集群

Kubernetes 集群部署202507 本實驗主要軟件環境及資源如下&#xff1a; 二進制部署CentOS8.5Kubernetes1.33.2Docker28.3.1高可用集群 一、系統要求 ?Kubermetes 系統由一組可執行程序組成&#xff0c;用戶可以通過Kubernetes在GitHub 的項目網站下載編譯好的二進制文件或…

127. Java 泛型 - 泛型類與子類型

文章目錄127. Java 泛型 - 泛型類與子類型1. 泛型類和接口的子類型化示例&#xff1a;ArrayList 和 List2. 自定義泛型接口的子類型化示例&#xff1a;泛型接口的子類型解釋3. 泛型類和接口的類型參數4. 總結127. Java 泛型 - 泛型類與子類型 1. 泛型類和接口的子類型化 在 J…

內網服務器怎么設置公網遠程訪問? windows桌面連接和Linux自帶SSH外網異地跨網用完整步驟教程

沒有公網IP的本地主機跨網訪問是經常需要用到的網絡場景。要設置內網服務器在公網進行異地遠程訪問&#xff0c;需依次完成確保網絡連接正常、配置防火墻、啟用遠程訪問服務、和利用類似nat123內網映射外網打通等一系列步驟&#xff0c;以保障不同內網的遠程訪問的順利進行。一…

數據提取之bs4(BeautifuSoup4)模塊與Css選擇器

BeautifuSoup4from bs4 import BeautifulSoup創建對象 <class bs4.BeautifulSoup>soup BeautifulSoup(源碼, 解析器)bs4標簽種類&#xff08;1&#xff09;tag: 標簽print(soup.title, type(soup.title))&#xff08;2&#xff09;獲取標簽里面的文本內容, 可導航的字符…

CPP中的List

一.list的介紹&#xff1a;1.list是可以在常數范圍內在任意位置進行插入和刪除的序列式容器&#xff0c;并且該容器可以前后雙向迭代。2.list的底層是雙向鏈表結構&#xff0c;帶有哨兵位的頭結點 。3. list與forward_list非常相似&#xff1a;最主要的不同在于forward_list是單…

Ntfs!LfsUpdateLfcbFromRestart函數分析之Ntfs!LfsFindOldestClientLsn

第0部分&#xff1a;//// Find the oldest client Lsn. Use the last flushed Lsn as a starting point.//Lfcb->OldestLsn Lfcb->LastFlushedLsn;LfsFindOldestClientLsn( RestartArea,Add2Ptr( RestartArea, Lfcb->ClientArrayOffset, PLFS_CLIENT_RECORD ),&…

「日拱一碼」021 機器學習——特征工程

目錄 特征選擇 過濾法&#xff08;Filter Methods&#xff09; 方差選擇法 相關系數法 卡方檢驗 包裹法&#xff08;Wrapper Methods&#xff09; 遞歸特征消除&#xff08;RFE&#xff09; 嵌入法&#xff08;Embedded Methods&#xff09; L1正則化&#xff08;Lasso…

k8s:安裝 Helm 私有倉庫ChartMuseum、helm-push插件并上傳、安裝Zookeeper

ChartMuseum 是 Kubernetes 生態中用于存儲、管理和發布 Helm Charts 的開源系統&#xff0c;主要用于擴展 Helm 包管理器的功能 核心功能 ?集中存儲?&#xff1a;提供中央化倉庫存儲Charts&#xff0c;支持版本管理和權限控制。 ? ?跨集群部署?&#xff1a;支持多集群環境…

C++編程學習(第二天)

1、求a和b兩個數之和。#include <iostream> using namespace std;int main() {int a, b, sum; //定義變量a、b、sumcout << "請輸入第一個數字a: "; //打印需要顯示的字符串cin >> a; // >&…

毫米波雷達守護銀發安全:七彩喜跌倒檢測儀重構居家養老防線

在老齡化加速與獨居老人數量攀升的背景下&#xff0c;跌倒已成為威脅老年人生命安全的“隱形殺手”。七彩喜跌倒檢測儀以毫米波雷達技術為核心&#xff0c;通過“非接觸式監測智能預警”重塑居家安全防護體系&#xff0c;為銀發群體構建起全天候、無感化的數字守護網。技術突破…

面試復盤:節流中第二次觸發的事件?答錯補課

面試復盤&#xff1a;節流中第二次觸發的事件&#xff1f;答錯補課 背景描述 今天面試時被問到一個看似基礎但暗藏玄機的問題&#xff1a;“節流&#xff08;Throttle&#xff09;函數中&#xff0c;第二次觸發的那一幀事件是否會被丟掉&#xff1f;” 我基于對經典節流實現的…

Spark偽分布式集群搭建(Ubuntu系統)

環境準備 系統要求&#xff1a;Ubuntu 20.04/22.04 LTS 軟件版本&#xff1a; Hadoop 3.3.5 JDK 8 Spark-3.5.6-bin-hadoop3 硬件要求&#xff1a;至少4GB內存&#xff0c;20GB磁盤空間 以下是基于Ubuntu系統的Spark偽分布式集群搭建全流程。以Spark 3.5.6 Hadoop 3.3.…

【快手】數據挖掘面試題0001:查找連續三天登錄的用戶

文章大綱一、測試數據構建二、自連接方案三、窗口函數方案一張用戶表&#xff0c;uer_id&#xff0c;signin_date&#xff0c;大概是這么幾項&#xff0c;查找連續三天登錄的用戶。 比如說&#xff0c;1,2兩天登錄不是連續三天&#xff0c;456登錄為連續三天登錄&#xff0c;56…

簡說scp命令

簡單介紹 scp的全稱是&#xff1a;Secure Copy Protocol&#xff08;安全復制協議&#xff09;&#xff0c;是Linux中用于在網絡中安全傳輸文件的命令行工具。它基于SSH協議&#xff0c;用于在本地服務器和遠程服務器之間&#xff0c;或者兩臺遠程服務器之間復制文件或目錄。 s…

自動化測試解決方案Parasoft SOAtest無腳本UI測試實踐指南

傳統UI自動化測試常面臨技術門檻高、維護成本大、穩定性差等挑戰。尤其在頁面頻繁變更時&#xff0c;測試腳本的更新和維護會顯著降低測試效率。 自動化測試解決方案Parasoft SOAtest通過可視化操作和智能元素定位技術&#xff0c;無需編寫代碼&#xff0c;讓測試人員能夠像真…

vscode配置頭文件和編譯器

在 VS Code 中配置編譯器和頭文件路徑需要修改兩個核心文件&#xff1a;c_cpp_properties.json&#xff08;用于智能提示&#xff09;和 tasks.json&#xff08;用于構建&#xff09;。以下是詳細步驟&#xff1a; —### 1. 配置智能提示和頭文件路徑 (c_cpp_properties.json)作…

HTML+JS+CSS制作一個數獨游戲

閑來無事&#xff0c;用HTMLJSCSS制作了一個數獨游戲消遣。其實主要是自己做題的時候用筆畫刪除數字太容易出錯&#xff0c;所以想搞一個程序稍微輔助一下。通過制作這個程序&#xff0c;反而提高了手工做題的水平&#xff0c;至少學會了記錄步數以便于回退。 20250710功能更新…

嵌入式硬件中電容的基本原理與實現詳解02

我們今天重點討論點知識點如下: 1.各種種類的電容優缺點對比講解 2.電容的標稱值介紹 3.電容的單位介紹 4.常見的電壓信號有哪些? 5. 電容的耐壓值講解 6.電容的容值有哪些? 7.12pF、15pF 電容常用在什么場合? 8. 振蕩電路中使用的電容常常需要使用什么材質的電容? 9.100n…

Python訓練打卡DAY46

DAY46&#xff1a;通道注意力&#xff08;SE注意力&#xff09; 恩師浙大疏錦行 知識點&#xff1a; 不同CNN層的特征圖&#xff1a;不同通道的特征圖什么是注意力&#xff1a;注意力家族&#xff0c;類似于動物園&#xff0c;都是不同的模塊&#xff0c;好不好試了才知道。通…