为什么我不能用 opencv 仿射变换翻转图像?
Why I cannot flip an image with opencv affine transform?
我在维基百科这个页面上读到了仿射变换: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)
我没有翻转版本的图像,而是图像变成了全黑图像。
我的代码有什么问题?
你的结果图片不应该是全黑的;结果图像的第一列有一些有意义的值,不是吗?你的做法是正确的,图片是水平翻转的,但是是相对于"image's coordinate system",即图片是沿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)
这是输入图像:
这是水平翻转的图像:
这是垂直翻转的图像:
对于这个非常基本的操作,手动设置变换矩阵可能并不困难,但对于除此之外的所有内容,您应该查看 getAffineTransform
,以及相关的一两个教程。设置旋转等可能会变得困难。
希望对您有所帮助!
我在维基百科这个页面上读到了仿射变换: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)
我没有翻转版本的图像,而是图像变成了全黑图像。 我的代码有什么问题?
你的结果图片不应该是全黑的;结果图像的第一列有一些有意义的值,不是吗?你的做法是正确的,图片是水平翻转的,但是是相对于"image's coordinate system",即图片是沿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)
这是输入图像:
这是水平翻转的图像:
这是垂直翻转的图像:
对于这个非常基本的操作,手动设置变换矩阵可能并不困难,但对于除此之外的所有内容,您应该查看 getAffineTransform
,以及相关的一两个教程。设置旋转等可能会变得困难。
希望对您有所帮助!