2010-07-17 22 views
19

मैं पायथन और सी मिश्रण OpenCV 2.1 करने के लिए बदलने के बाद एक OpenCV परियोजना है, सी कोड के लिए अपने कॉल, किसी भी अधिक काम नहीं कर रहे है, क्योंकि हो OpenCV कोई और अधिक बड़ा घूँट बाइंडिंग उपयोग कर रहा है ।बड़ा घूँट अजगर मूल कोड को बाइंडिंग OpenCV के साथ काम नहीं कर 2.1

अजगर से, मैं निम्नलिखित प्रोटोटाइप के साथ एक सी समारोह कॉल करने के लिए इस्तेमाल किया गया था:

int fast_support_transform(CvMat * I, CvMat * N,...); 

अब, मैं निम्नलिखित त्रुटि मिलती है:

TypeError: in method 'fast_support_transform', argument 1 of type 'CvMat *' 

सी कोड लाइब्रेरी में से है बनाया मेरे द्वारा जो पायथन इंटरफेस का उत्पादन करने के लिए एसडब्ल्यूआईजी का उपयोग करता है। मुझे यकीन नहीं है, लेकिन मुझे लगता है कि ओपनसीवी अब सीटीपीएस का उपयोग कर रहा है और यह कोड मेरे मूल कोड में सीवीमैट पॉइंटर भेजने में असमर्थ है।

क्या आप इस समस्या के लिए तेज़ समाधान के बारे में जानते हैं? किसी भी सुझाव का स्वागत है।

अद्यतन: आगंतुक, इस सवाल का ध्यान दें पुराना है। ओपनसीवी में पाइथन समर्थन अब बहुत परिपक्व है। CvMat को डिफ़ॉल्ट रूप से एक Numpy सरणी के रूप में दर्शाया जा रहा है।

+0

कोशिश 'cvArr's को' cvMat's परिवर्तित करने के लिए और फिर तर्कों के रूप cvArr * का उपयोग कर? सीवीएआरटी सीवीएआरआर से लिया गया है। तो, एक बार जब आप cvArr सूचक प्राप्त करते हैं, तो आप इसे वापस cvMat में परिवर्तित कर सकते हैं और इसका उपयोग कर सकते हैं। या दूसरा विकल्प ओपनसीवी के अंतिम कामकाजी संस्करण पर वापस जाना होगा। – askmish

उत्तर

1

काम के लिए मैंने एक बार साइथन का उपयोग करके टेस्सेरैक्ट (ओसीआर सॉफ्टवेयर) लपेट लिया जो एक बहुत ही पायथन-एस्क्यू भाषा है। आप एक अधिकतर पायथन प्रोग्राम लिखते हैं जो पूर्ण-ऑन बाइनरी पायथन मॉड्यूल में संकलित हो जाता है।

#make sure Cython knows about a CvMat 
cdef extern from "opencv2/modules/core/include/opencv2/types_c.h": 
    ctypedef struct CvMat 

#import your fast_support_transform 
cdef extern from "my_fast_support_transform_file.h": 
    int fast_support_transform(CvMat * I, CvMat * N, ...) 

#this bit is the glue code between Python and C 
def my_fast_support_transform(CvMat * I, CvMat * N, ...) 
    return fast_support_transform(CvMat * I, CvMat * N, ...) 

: अपने .pyx फ़ाइल में आप C/C++ फ़ाइलें आयात कर सकते/पुस्तकालयों वस्तुओं, कॉल काम करता है, आदि

http://www.cython.org/

आप एक छोटे Cython परियोजना को परिभाषित करने और की तरह कुछ कर सकता का दृष्टांत तुम भी एक distutils/Cython फ़ाइल है कि कुछ इस तरह दिखता निर्माण की आवश्यकता होगी:

from distutils.core import setup 
from distutils.extension import Extension 
from Cython.Distutils import build_ext 

setup(
    cmdclass = {'build_ext': build_ext}, 
    ext_modules = [Extension("wrapped_support_transform", ["wrapped_support_transform.pyx"])] 
) 

Cython वेबसाइट बनाने के लिए एक उत्कृष्ट ट्यूटोरियल है आपके पहले Cython परियोजना: http://docs.cython.org/src/userguide/tutorial.html

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