gpt4 book ai didi

opencv - 为什么我不能使用opencv仿射变换来翻转图像?

转载 作者:行者123 更新时间:2023-12-02 17:28:04 25 4
gpt4 key购买 nike

我已经在维基百科的以下页面上了解了仿射变换:https://en.wikipedia.org/wiki/Affine_transformation

我说如果我想反射图像,可以将仿射矩阵设置为[[-1,0,0],[0,1,0],[0,0,1]],但是当我尝试了以下代码:

im = cv2.imread(imgpth)
im = cv2.resize(im, (1024, 512))
H, W, _ = im.shape

cv2.imshow('org', im)
M = np.float32([[-1, 0, 0], [0, 1, 0]])
aff = cv2.warpAffine(im, M, (W, H))
cv2.imshow('affine', aff)
cv2.waitKey(0)

我没有图像的翻转版本,而是图像变成了全黑图像。
我的代码有什么问题?

最佳答案

您的结果图片不应完全是黑色的;结果图像的第一列有一些有意义的值,不是吗?您的方法是正确的,图像是水平翻转的,但是是相对于“图像的坐标系”完成的,即,图像沿y轴翻转,并且您只能看到翻转后图像的最右列。因此,您只需要在x方向上添加翻译即可。

让我们看下面的代码:

# Load image, get shape
img = cv2.imread('rEC3E.png')
H, W = img.shape[:2]

# Flip horizontally
M = np.float32([[-1, 0, W-1], [0, 1, 0]]) # Added translation of size W-1 in x direction
affH = cv2.warpAffine(img, M, (W, H))

# Flip vertically
M = np.float32([[1, 0, 0], [0, -1, H-1]]) # Added translation of size H-1 in y direction
affV = cv2.warpAffine(img, M, (W, H))

# Outputs
cv2.imshow('org', img)
cv2.imshow('flip horizontally', affH)
cv2.imshow('flip vertically', affV)
cv2.waitKey(0)

这是输入图像:

Input

那是水平翻转的图像:

Horizontally flipped

那是垂直翻转的图像:

enter image description here

对于这种非常基本的操作,手动设置转换矩阵可能并不困难,但是对于除此以外的所有内容,您都应该看看 getAffineTransform ,以及有关的一两个教程。设置旋转等可能会变得困难。

希望有帮助!

关于opencv - 为什么我不能使用opencv仿射变换来翻转图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57863376/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com