Как мы можем вращать изображение в круговом движении в питоне - PullRequest
0 голосов
/ 11 мая 2018

Как мы можем вращать изображение круговыми движениями, как свободное вращение в любом направлении в питоне. Является ли это возможным? Если да, то как я могу это сделать? Спасибо!

Что я пробовал, я использовал библиотеку opencv, чтобы повернуть изображение на 1 градус по щелчку мыши. но это не работает. Он вращается медленно и должен щелкать при каждом повороте на 1 градус.

Вот код для этого

 import cv2 as cv
 #import numpy as np

 DEF_ANGLE = 0

 def click_to_rotate(event,x,y,flags,param):
 global DEF_ANGLE,DEF_ANGLE1
 if event == cv.EVENT_FLAG_LBUTTON:
    DEF_ANGLE += 1


 elif event == cv.EVENT_FLAG_RBUTTON:
    DEF_ANGLE -= 1


 cv.namedWindow('window')
 img = cv.imread('4.2.04.tiff')    #put any image here with path
 cv.setMouseCallback('window',click_to_rotate)



 while(True):
 num_rows, num_cols = img.shape[:2]
 rotation_matrix = 
 cv.getRotationMatrix2D((num_cols/2,num_rows/2),DEF_ANGLE,1) 
 img_rotation = cv.warpAffine(img, rotation_matrix, (num_cols, num_rows))
 cv.imshow('window',img_rotation)
 k = cv.waitKey(1) & 0xFF
 if k == 27:
     break

 cv.destroyAllWindows()

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

У меня есть рабочая демоверсия вашего ожидания:

import cv2 as cv

DEF_ANGLE = 0
pressed_left = False
pressed_right = False

def click_to_rotate(event, x, y, flags, param):
    global DEF_ANGLE, DEF_ANGLE1, pressed_left, pressed_right

    if event == cv.EVENT_LBUTTONDOWN:
        pressed_left = True
        DEF_ANGLE += 1

    elif event == cv.EVENT_MOUSEMOVE:
        #print('x,y',x,y)
        if(pressed_left):
            DEF_ANGLE += 1 

    if event == cv.EVENT_RBUTTONDOWN:
        pressed_right = True
        DEF_ANGLE -= 1

    elif event == cv.EVENT_MOUSEMOVE:
        #print('x,y',x,y)
        if(pressed_right):
            DEF_ANGLE -= 1 

    elif event == cv.EVENT_LBUTTONUP:
        pressed_left = False

    elif event == cv.EVENT_RBUTTONUP:
        pressed_right = False

cv.namedWindow('window')
path = 'C:/Users/selwyn77/Desktop/'
img = cv.imread(path + 'ch.jpg')
img = cv2.resize(img, (0, 0), fx = 0.1, fy = 0.1) 
cv.setMouseCallback('window', click_to_rotate)

while(True):
    num_rows, num_cols = img.shape[:2]
    rotation_matrix = cv.getRotationMatrix2D((num_cols/2, num_rows/2), DEF_ANGLE, 1)
    img_rotation = cv.warpAffine(img, rotation_matrix, (num_cols, num_rows))
    cv.imshow('window', img_rotation)
    k = cv.waitKey(1) & 0xFF
    if k == 27:
        break

cv.destroyAllWindows()

Я использовал две глобальные переменные для левого и правого поворота.

0 голосов
/ 11 мая 2018

@ JeruLuke, эй .... Вот как мне удалось это сделать: D Проверьте этот код

import cv2 as cv
#import numpy as np

DEF_ANGLE = 0
pressed = False

def click_to_rotate(event,x,y,flags,param):
global DEF_ANGLE,DEF_ANGLE1,pressed
if event == cv.EVENT_LBUTTONDOWN:
    pressed = True
    #DEF_ANGLE += 1

elif event == cv.EVENT_MOUSEMOVE:
    #print('x,y',x,y)
    if(pressed):
        DEF_ANGLE += 1

elif event == cv.EVENT_LBUTTONUP:
    pressed = False


cv.namedWindow('window')
img = cv.imread('4.2.04.tiff')    #put any image here with path
cv.setMouseCallback('window',click_to_rotate)

while(True):
   num_rows, num_cols = img.shape[:2]
   rotation_matrix = cv.getRotationMatrix2D((num_cols/2, num_rows/2), 
   DEF_ANGLE, 1)
img_rotation = cv.warpAffine(img, rotation_matrix, (num_cols, num_rows))
cv.imshow('window',img_rotation)
k = cv.waitKey(1) & 0xFF
if k == 27:
    break

cv.destroyAllWindows()

Теперь здесь, безусловно, есть разница между моим предыдущим кодом и этим кодом.и теперь возникает проблема, когда я двигаю мышь, она вращается только в одном направлении, то есть вращается только вправо.Как повернуть влево, используя ту же логику ??

Спасибо!

...