如何借助OpenCv库在Python中旋转图像,以及如何更改图像的高度和宽度值(不使用OpenCv中内置的旋转方法)。它必须实现两个嵌套的for循环。
img=cv2.imread('Images/Screenshot.png',cv2.IMREAD_GRAYSCALE)
height, width = img.shape
# for i in range(0,height):
# for j in range(0,width):
# img[i][j]=
# show rotated image
cv2.imshow("image",img)
感谢您抽出宝贵的时间来帮助我!
答案 0 :(得分:6)
您可以使用String serviceName
创建空白图像,然后将像素从当前图像读取到空白图像。您可以更改读取像素的顺序以执行一些基本旋转。以下示例将有所帮助。
np.zeros()
img = cv2.imread('texas_longhorns_log.png')
h,w,c = img.shape
h = h-1
w = w-1
empty_img = np.zeros([h,w,3], dtype=np.uint8)
for i in range(h):
for j in range(w):
empty_img[i,j] = img[j,i]
empty_img = empty_img[0:h,0:w]
cv2.imwrite("tester1.png", empty_img)
h,w,c = img.shape
h = h-1
w = w-1
empty_img = np.zeros([h,w,3], dtype=np.uint8)
for i in range(h):
for j in range(w):
empty_img[i,j] = img[h-j,w-i]
empty_img = empty_img[0:h,0:w]
cv2.imwrite("tester2.png", empty_img)
答案 1 :(得分:1)
如果您需要在OpenCV中进行简单的轮换,它是内置的:
img=cv2.imread('Images/Screenshot.png',cv2.IMREAD_GRAYSCALE)
imgrot = cv2.rotate(img,cv2.ROTATE_90_CLOCKWISE)
其他可能性是cv2.ROTATE_90_COUNTERCLOCKWISE
和cv2.ROTATE_180
答案 2 :(得分:0)
必须是OpenCv吗?原因如果不是,您可以使用PIL轻松做到这一点:
from PIL import Image
def rotate_img(img_path, rt_degr):
img = Image.open(img_path)
return img.rotate(rt_degr)
img_rt_90 = rotate_img('Images/Screenshot.png', 90)
img_rt_90.save('img_rt_90.png')
答案 3 :(得分:0)
我使用PIL软件包,这样做非常简单。
from PIL import Image
path = '/Users/diegodsp/sample.jpg'
img = Image.open(path)
img = img.rotate(90) # 90, -90, 180, ...
img.save(path) # to override your old file
答案 4 :(得分:0)
如果您有兴趣从头开始,则可以使用剪切变形方法将图像旋转到任意角度。 这里有一个很好的参考: https://medium.com/@gautamnagrawal/rotating-image-by-any-angle-shear-transformation-using-only-numpy-d28d16eb5076