網(wǎng)站首頁 編程語言 正文
本文實例為大家分享了python opencv實現(xiàn)圖像矯正的具體代碼,供大家參考,具體內(nèi)容如下
問題簡介
一般的我們對圖像中的目標進行分析和檢測時,往往目標具有一定的傾斜角度,自然環(huán)境中正面向我們的目標實際是很少的,那將這些傾斜的目標“扶正”的過程就就叫做圖像矯正。
透視變換demo
圖像矯正使用的主要技術(shù)是透視變換。
python-opencv 透視變換demo如下:
import cv2
import numpy as np
img = cv2.imread('/home/pzs/圖片/1.jpeg')
result3 = img.copy()
img = cv2.GaussianBlur(img,(3,3),0)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray,50,150,apertureSize = 3)
cv2.imwrite("canny.jpg", edges)
src = np.float32([[207, 151], [517, 285], [17, 601], [343, 731]])
dst = np.float32([[0, 0], [337, 0], [0, 488], [337, 488]])
m = cv2.getPerspectiveTransform(src, dst)
result = cv2.warpPerspective(result3, m, (337, 488))
cv2.imshow("result", result)
cv2.waitKey(0)
主要是使用cv2.warpPerspective()函數(shù)
透視變換結(jié)果
透視變換使用很簡單,關(guān)鍵是如何找到目標的4個頂點。
如何找到目標的4個頂點
如何找到這4個頂點:
方法有很多種,如:直線檢測,輪廓檢測,最小外接矩形等。
使用輪廓檢測方式:
import cv2
import imutils
img = cv2.imread('1.jpeg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (5, 5), 0)
dilate = cv2.dilate(blurred, cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3)))
edged = cv2.Canny(dilate, 30, 120, 3) ? ? ? ? ? ?# 邊緣檢測
cnts = cv2.findContours(edged.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) ?# 輪廓檢測
cnts = cnts[0] if imutils.is_cv2() else cnts[1] ?# 判斷是opencv2還是opencv3
docCnt = None
if len(cnts) > 0:
? ? cnts = sorted(cnts, key=cv2.contourArea, reverse=True) # 根據(jù)輪廓面積從大到小排序
? ? for c in cnts:
? ? ? ? peri = cv2.arcLength(c, True) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? # 計算輪廓周長
? ? ? ? approx = cv2.approxPolyDP(c, 0.02*peri, True) ? ? ? ? ? # 輪廓多邊形擬合
? ? ? ? # 輪廓為4個點表示找到紙張
? ? ? ? if len(approx) == 4:
? ? ? ? ? ? docCnt = approx
? ? ? ? ? ? break
for peak in docCnt:
? ? peak = peak[0]
? ? cv2.circle(img, tuple(peak), 10, (255, 0, 0))
cv2.imshow('img', img)
cv2.waitKey(0)
原理:
1、對圖片進行輪廓檢測
2、對檢測出的輪廓進行多邊形逼近
3、多邊形為四邊形且輪廓面積最大的圖形為紙張
4、輸出標記四個定點
cv2.approxPolyDP() 多邊形逼近
重點講解這個函數(shù)
作用:
對目標圖像進行近似多邊形擬合,使用一個較少頂點的多邊形去擬合一個曲線輪廓,要求擬合曲線與實際輪廓曲線的距離小于某一閥值。
函數(shù)原形:
cv2.approxPolyDP(curve, epsilon, closed) -> approxCurve
參數(shù):
curve : 圖像輪廓點集,一般由輪廓檢測得到
epsilon : 原始曲線與近似曲線的最大距離,參數(shù)越小,兩直線越接近
closed : 得到的近似曲線是否封閉,一般為True
返回值:
approxCurve :返回的擬合后的多邊形頂點集。
原文鏈接:https://blog.csdn.net/HUXINY/article/details/89467344
相關(guān)推薦
- 2022-10-01 一文詳解C#?Chart控件_C#教程
- 2023-02-23 淺談Go語言的高效編碼細節(jié)_Golang
- 2023-04-10 詳解Go語言中的數(shù)據(jù)庫操作_Golang
- 2022-07-18 C語言簡明講解快速排序的應用_C 語言
- 2022-07-18 Android 防重復點擊(Kotlin 協(xié)程實現(xiàn) 和 Handler實現(xiàn))
- 2022-05-25 <C++>詳解類對象作為類成員時調(diào)用構(gòu)造和析構(gòu)的時機及靜態(tài)成員解釋
- 2022-10-31 利用WinForm實現(xiàn)上左右布局的方法詳解_C#教程
- 2022-05-27 Python?nonlocal關(guān)鍵字?與?global?關(guān)鍵字解析_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支