如何旋转图像内的一组对象?

时间:2020-06-27 14:03:54

标签: python opencv image-processing

我有这张黑白图像,我想将其转换为一个新图像,其中4个角球将形成一个完美的 upright 矩形,并保持原始所有对象之间的所有相对距离图片。

我相信某种轮换可以满足我的要求,但是,作为OpenCV的新手,我不知道该怎么做。据我了解,一个人可以旋转图像,但是我想要的不是旋转整个图像,而是旋转上述矩形的球(以及该矩形内的所有对象)。

任何建议将不胜感激。

预先感谢My image.

1 个答案:

答案 0 :(得分:0)

感谢所有评论,这使我走上了正轨。

我已经使用以下Python代码解决了自己的问题:

import cv2
import numpy as np

img = cv2.imread('x.jpg', -1)
h, w = img.shape

img2 = img[:400, :400]

iIndex = np.where(img2 == 0)

xmed1 = np.mean(iIndex[0])
ymed1 = np.mean(iIndex[1])

img2 = img[:400, w-400:]

iIndex = np.where(img2 == 0)

xmed2 = np.mean(iIndex[0])
ymed2 = np.mean(iIndex[1]) + w - 100

angle = np.arctan((xmed2-xmed1)/(ymed2-ymed1))
angle = np.degrees(angle)

m = cv2.getRotationMatrix2D((xmed1,ymed1), angle, 1)
imgR = cv2.warpAffine(img, m, (w, h))

imgR[:, :100] = 255
imgR[:, w - 100:] = 255
imgR[-100:, :] = 255
imgR[:100, :] = 255

cv2.namedWindow('rotated', cv2.WINDOW_KEEPRATIO)
cv2.imshow('rotated', imgR)
cv2.resizeWindow('rotated', 1000, 1000)


cv2.waitKey(0)
cv2.destroyAllWindows()