import numpy as np
from PIL import ImageGrab
import cv2
angle = -90
scale = 1.0
while True:
img = ImageGrab.grab()
img_np = np.array(img)
frame = cv2.cvtColor(img_np, cv2.COLOR_BGR2RGB)
new = cv2.rotate(frame,rotateCode = 0)# this is the line to rotate the image
true = cv2.resize(new, (0,0), fx = 0.6, fy = 0.6) # with fxand fy u can control the size
cv2.imshow('output', true)
if cv2.waitKey(1) == 27:
break
cv2.destroyAllWindows()
8条答案
按热度按时间ippsafx71#
这是迄今为止我找到的旋转图像同时避免裁剪图像的最佳解决方案。
在C++中的OpenCV中旋转图像而不进行裁剪
字符串
当Angular 为90*n时,您可以添加检查以避免某些计算,但此函数将适用于任何Angular 。
利用
numpy
矢量化型
5t7ly7z52#
如果你只关心90度的旋转,那么就用numpy代替。它更容易,并且适用于opencv输入:
字符串
dxxyhpgq3#
由于我不知道你的代码,我仍然会猜测使用
imutils.rotate_bound
函数将解决这个问题。例如:rotate = imutils.rotate_bound(image, angle)
wswtfjt74#
这里是
ndimage.rotate
的替代品来自SciPyRelated documentation的
字符串
的数据
型
的
型
的
型
的
cgh8pdjw5#
这是使用cv2.rotate(frame,rotateCode = 1)旋转图像帧以及使用帧的cv2.CAP_PROP_FRAME_WIDTH和cv2.CAP_PROP_FRAME_HEIGHT重新缩放或调整大小的最简单方法。
字符串
您可以输入rotateCode= 0或1或2。这取决于你的轮换。它会给予你0度或90度或180度或270度的Angular
型
希望能帮到你。
dluptydi6#
虽然这个问题是针对CV2提出的,但您可以使用python的本机映像库来解决这个问题。
字符串
如果你在rotate命令中省略了
expand=True
,你会得到一个看起来像OP右手边照片的结果。rm5edbpk7#
您也可以使用填充,即在图像的两侧添加边框,然后旋转它以避免从原始图像裁剪。
字符串
6xfqseft8#
它的简单没有任何warpaffine或任何计算的需要检查这个代码了
字符串