国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術(shù)及教程分享平臺!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Python - python opencv實現(xiàn)任意角度的透視變換實例代碼

python opencv實現(xiàn)任意角度的透視變換實例代碼

2021-01-04 00:51ShellCollector Python

這篇文章主要介紹了python opencv實現(xiàn)任意角度的透視變換實例代碼,具有一定借鑒價值,需要的朋友可以參考下

本文主要分享的是一則python+opencv實現(xiàn)任意角度的透視變換的實例,具體如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# -*- coding:utf-8 -*-
import cv2
import numpy as np
 
 
def rad(x):
  return x * np.pi / 180
 
 
img = cv2.imread("6.jfif")
cv2.imshow("original", img)
 
# 擴展圖像,保證內(nèi)容不超出可視范圍
img = cv2.copyMakeBorder(img, 200, 200, 200, 200, cv2.BORDER_CONSTANT, 0)
w, h = img.shape[0:2]
 
anglex = 0
angley = 30
anglez = 0 #是旋轉(zhuǎn)
fov = 42
while 1:
  # 鏡頭與圖像間的距離,21為半可視角,算z的距離是為了保證在此可視角度下恰好顯示整幅圖像
  z = np.sqrt(w ** 2 + h ** 2) / 2 / np.tan(rad(fov / 2))
  # 齊次變換矩陣
  rx = np.array([[1, 0, 0, 0],
          [0, np.cos(rad(anglex)), -np.sin(rad(anglex)), 0],
          [0, -np.sin(rad(anglex)), np.cos(rad(anglex)), 0, ],
          [0, 0, 0, 1]], np.float32)
 
  ry = np.array([[np.cos(rad(angley)), 0, np.sin(rad(angley)), 0],
          [0, 1, 0, 0],
          [-np.sin(rad(angley)), 0, np.cos(rad(angley)), 0, ],
          [0, 0, 0, 1]], np.float32)
 
  rz = np.array([[np.cos(rad(anglez)), np.sin(rad(anglez)), 0, 0],
          [-np.sin(rad(anglez)), np.cos(rad(anglez)), 0, 0],
          [0, 0, 1, 0],
          [0, 0, 0, 1]], np.float32)
 
  r = rx.dot(ry).dot(rz)
 
  # 四對點的生成
  pcenter = np.array([h / 2, w / 2, 0, 0], np.float32)
 
  p1 = np.array([0, 0, 0, 0], np.float32) - pcenter
  p2 = np.array([w, 0, 0, 0], np.float32) - pcenter
  p3 = np.array([0, h, 0, 0], np.float32) - pcenter
  p4 = np.array([w, h, 0, 0], np.float32) - pcenter
 
  dst1 = r.dot(p1)
  dst2 = r.dot(p2)
  dst3 = r.dot(p3)
  dst4 = r.dot(p4)
 
  list_dst = [dst1, dst2, dst3, dst4]
 
  org = np.array([[0, 0],
          [w, 0],
          [0, h],
          [w, h]], np.float32)
 
  dst = np.zeros((4, 2), np.float32)
 
  # 投影至成像平面
  for i in range(4):
    dst[i, 0] = list_dst[i][0] * z / (z - list_dst[i][2]) + pcenter[0]
    dst[i, 1] = list_dst[i][1] * z / (z - list_dst[i][2]) + pcenter[1]
 
  warpR = cv2.getPerspectiveTransform(org, dst)
 
  result = cv2.warpPerspective(img, warpR, (h, w))
  cv2.imshow("result", result)
  c = cv2.waitKey(30)
 
  # anglex += 3      #auto rotate
  # anglez += 1       #auto rotate
  # angley += 2      #auto rotate
 
  # 鍵盤控制
  if 27 == c: # Esc quit
    break;
  if c == ord('w'):
    anglex += 1
  if c == ord('s'):
    anglex -= 1
  if c == ord('a'):
    angley += 1
    # dx=0
  if c == ord('d'):
    angley -= 1
  if c == ord('u'):
    anglez += 1
  if c == ord('p'):
    anglez -= 1
  if c == ord('t'):
    fov += 1
  if c == ord('r'):
    fov -= 1
  if c == ord(' '):
    anglex = angley = anglez = 0
  if c == ord('q'):
    print("======================================")
    print('旋轉(zhuǎn)矩陣:\n', r)
    print("angle alpha: ", anglex, 'angle beta: ', angley, "dz: ", anglez, ": ", z)
 
cv2.destroyAllWindows()

總結(jié)

以上就是本文關(guān)于python opencv實現(xiàn)任意角度的透視變換實例代碼的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

原文鏈接:http://blog.csdn.net/jacke121/article/details/78996288

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 成人中文字幕在线观看 | 亚洲精品欧洲精品 | 精品无人乱码一区二区三区 | 亚洲在线一区 | 色先锋av资源中文字幕 | 国产精品免费久久久久久久久久中文 | 草久在线视频 | 国产精品美女久久久 | 亚洲综合国产 | 久久国产精品无码网站 | 最新高清无码专区 | 99视频网站 | 国产深夜视频在线观看 | 欧美成人精精品一区二区频 | 精品网站www | 久久影院免费观看 | 在线视频一区二区三区 | 日韩三级在线 | 一久久久 | 国产精品视频入口 | 老熟妇午夜毛片一区二区三区 | 中文字幕一区日韩精品欧美 | 91中文字幕 | 亚洲国产精品久久久久 | 国产精品一区二区三区在线播放 | 成人片在线播放 | 91免费看网站 | 成人午夜影视 | 欧美在线不卡 | 日韩精品视频一区二区三区 | 欧美在线a | 欧美精品久久久久久久久老牛影院 | 综合伊人久久 | 欧美福利在线观看 | 性毛片 | 中文字幕欧美日韩 | 国产精品久久天天躁 | 4438x成人网最大色成网站 | 国产高清视频在线 | jizz中国jizz女人 | 国产中文 |