原始(即需要變換的)
透視變換**
# -*- coding:utf-8 -*-
import cv2
import numpy as np
import matplotlib.pyplot as plt
# 計算透視變換引數矩陣
defcal_perspective_params
(img, points)
:# 設定偏移點。如果設定為(0,0),表示透視結果只顯示變換的部分(也就是畫框的部分)
offset_x =
100 offset_y =
100 img_size =
(img.shape[1]
, img.shape[0]
) src = np.float32(points)
# 透視變換的四個點
dst = np.float32(
[[offset_x, offset_y]
,[img_size[0]
- offset_x, offset_y]
,[offset_x, img_size[1]
- offset_y]
,[img_size[0]
- offset_x, img_size[1]
- offset_y]])
# 透視矩陣
m = cv2.getperspectivetransform(src, dst)
print
(m)# 透視逆矩陣
m_inverse = cv2.getperspectivetransform(dst, src)
print
(m_inverse)
return m, m_inverse
# 透視變換
defimg_perspect_transform
(img, m)
: img_size =
(img.shape[1]
, img.shape[0]
)return cv2.warpperspective(img, m, img_size)
defdraw_line
(img,p1,p2,p3,p4)
: points =
[list
(p1)
,list
(p2)
,list
(p3)
,list
(p4)
]# 畫線
img = cv2.line(img, p1, p2,(0
,0,255),
3)img = cv2.line(img, p2, p4,(0
,0,255),
3)img = cv2.line(img, p4, p3,(0
,0,255),
3)img = cv2.line(img, p3, p1,(0
,0,255),
3)return points,img
if __name__ ==
'__main__'
:# 觀察影象畫素大小,便於手動選點
)# 選取四個點,分別是左上、右上、左下、右下
points, img = draw_line(img,
(208
,320),
(798
,315),
(160
,1308),
(1011
,1230))
cv2.imshow(
'test01'
,img)
cv2.waitkey(0)
cv2.imwrite(
'test01.png'
,img)
m, m_inverse = cal_perspective_params(img, points)
trasform_img = img_perspect_transform(img, m)
# 觀察透檢視像畫素大小
plt.figure(
) plt.imshow(trasform_img)
plt.show(
) cv2.imshow(
'test02.png'
,trasform_img)
cv2.waitkey(0)
cv2.imwrite(
'test02.png'
,trasform_img)
選中透視區域(確定四個座標點)
透視效果
透視變換原理
可參考:
opencv透視變換
1 目前效果最好的乙個 但還是紙牌能檢測出來 2 下面將我修改執行成功的 貼出,至於優化,提高識別四邊形準確度,還需要繼續研究。透視變換,檢測四邊形,有時候容易檢測不出 但目前效果最好的就是該程式 include stdafx.h include core core.hpp include incl...
opencv 透視變換
cv getperspectivetransform c 介面其呼叫形式如下 point2f src 4 dst 4 src 0 x 賦值 cv mat cv getperspectivetransform 返回透視變換矩陣 const cv point2f src,源影象四個頂點座標 點陣列 co...
OpenCV 透視變換矯正
演示結果參考 功能實現 執行程式,會顯示的尺寸,按回車鍵後,依次點選需矯正的的左上 右上 左下 右下角,並能顯示其座標,結果彈出矯正後的,如圖上的pic2對話方塊。可以繼續選擇四個點進行實驗,按下字元 q 後退出。如下 注 圖中的11.jpg自己選取放到該程式目錄下。使用滑鼠在原影象上選取感興趣區域...