2012-01-27 15 views
20

के आसपास एक्स डिग्री द्वारा छवि को घुमाएं। मुझे ओपनसीवी का उपयोग करके पाइथन में एक विशिष्ट (अक्सर बहुत छोटा) कोण द्वारा एक विशिष्ट बिंदु के चारों ओर एक छवि को घूर्णन करने के लिए उदाहरण खोजने में कठिनाई हो रही है।ओपनसीवी पायथन विशिष्ट बिंदु

def rotateImage(image, angle): 
    if image != None: 
     dst_image = cv.CloneImage(image) 

     rotate_around = (0,0) 
     transl = cv.CreateMat(2, 3, cv.CV_32FC1) 

     matrix = cv.GetRotationMatrix2D(rotate_around, angle, 1.0, transl) 
     cv.GetQuadrangleSubPix(image, dst_image, transl) 
     cv.GetRectSubPix(dst_image, image, rotate_around) 

    return dst_image 

उत्तर

23
import numpy as np 

def rotateImage(image, angle): 
    image_center = tuple(np.array(image.shape[1::-1])/2) 
    rot_mat = cv2.getRotationMatrix2D(image_center, angle, 1.0) 
    result = cv2.warpAffine(image, rot_mat, image.shape[1::-1], flags=cv2.INTER_LINEAR) 
    return result 

आप CV2 संस्करण का उपयोग कर रहे हैं मान लिया जाये, कि कोड पाता है:

यह वही है मैं अब तक है, लेकिन यह एक बहुत ही अजीब है, जिसके परिणामस्वरूप छवि बनाता है, लेकिन यह कुछ हद तक घुमाया जाता है है जिस छवि को आप घूमना चाहते हैं उसका केंद्र, रूपांतरण मैट्रिक्स की गणना करता है और छवि पर लागू होता है।

+0

मदद के लिए धन्यवाद, लेकिन मैं इतना "सीवी" मॉड्यूल का उपयोग कर रहा है और आप "CV2" का उपयोग कर रहे हैं, इसकी विशेष रूप से "image.shape" के बारे में शिकायत नहीं है। मैं अभी तक "सीवी" मॉड्यूल का उपयोग कर रहा हूं, इसलिए मुझे अभी तक "सीवी 2" के साथ सभी बदलाव नहीं मिल रहे हैं। मुझे पता है कि मेरी छवि है (140,140), इसलिए मैंने छवि कोड के स्थान पर कड़ी कोडिंग की कोशिश की, लेकिन यह बिल्कुल पसंद नहीं आया। – Mike

+1

मुझे लगता है कि मैंने कुछ प्रगति की हो सकती है, लेकिन फिर भी एक समस्या में चल रहा है। (छवि, rot_mat, cv.GetSize (छवि), झंडे = cv2.INTER_LINEAR) परिणाम = cv2.warpAffine Traceback (सबसे हाल कॉल पिछले):: यहाँ नवीनतम कोड है परिणाम = cv2.warpAffine (छवि , rot_mat, cv.GetSize (छवि), झंडे = cv2.INTER_LINEAR) लेखन त्रुटि: एक numpy सरणी – Mike

+14

मैं एक समस्या cv2.getRotationMatrix2D (बीच में = image_center, कोण = कोण, पैमाना = 1) चल रहा है नहीं है TypeError: फ़ंक्शन में 2 तर्क (3 दिए गए) – Hani

2

@ एलेक्स-रॉड्रिग्स उत्तर में त्वरित ट्विक ... चैनलों की संख्या सहित आकार के साथ सौदों।

import cv2 
import numpy as np 

def rotateImage(image, angle): 
    center=tuple(np.array(image.shape[0:2])/2) 
    rot_mat = cv2.getRotationMatrix2D(center,angle,1.0) 
    return cv2.warpAffine(image, rot_mat, image.shape[0:2],flags=cv2.INTER_LINEAR) 
18

या बहुत आसान उपयोग SciPy

from scipy import ndimage 

#rotation angle in degree 
rotated = ndimage.rotate(image_to_rotate, 45) 

अधिक उपयोग की जानकारी के लिए here देखते हैं।

+0

मैं पीएनजी की निर्देशिका के माध्यम से लूपिंग कर रहा हूं और ऐसा कर रहा हूं लेकिन मुझे एक रनटाइम त्रुटि मिलती है: अवैध रोटेशन विमान निर्दिष्ट है। कोई फिक्स? –

+0

क्या आप एक खुली सीवी छवि में गुजरते हैं? जैसे: img = cv2.imread ('messi5.jpg', 0) – fivef

+3

यह मेरे लिए काफी धीमा है –

4

cv2.warpAffine फ़ंक्शन रिवर्स ऑर्डर में आकार पैरामीटर लेता है: (col, row) जो ऊपर दिए गए उत्तरों का उल्लेख नहीं करते हैं। यहां बताया गया है मेरे लिए काम किया है:

import numpy as np 

def rotateImage(image, angle): 
    row,col = image.shape 
    center=tuple(np.array([row,col])/2) 
    rot_mat = cv2.getRotationMatrix2D(center,angle,1.0) 
    new_image = cv2.warpAffine(image, rot_mat, (col,row)) 
    return new_image 
7
def rotate(image, angle, center = None, scale = 1.0): 
    (h, w) = image.shape[:2] 

    if center is None: 
     center = (w/2, h/2) 

    # Perform the rotation 
    M = cv2.getRotationMatrix2D(center, angle, scale) 
    rotated = cv2.warpAffine(image, M, (w, h)) 

    return rotated 
1
import imutils 

vs = VideoStream(src=0).start() 
... 

while (1): 
    frame = vs.read() 
    ... 

    frame = imutils.rotate(frame, 45) 

अधिक: https://github.com/jrosebr1/imutils

+0

यह किसी भी छवि को काट नहीं सकता: 'imutils.rotate_bound (frame, 90)' –

संबंधित मुद्दे