2008-10-24 4 views
22

में वेबकैम उपयोग मैं वेबकैम से कनेक्ट करने के लिए सी # में एक प्रोग्राम बना रहा हूं और इसके साथ कुछ छवि कुशलतापूर्वक काम करता हूं। मेरे पास एक वर्किंग एप्लिकेशन है जो वेबकैम से कनेक्ट करने के लिए win32 api (avicap32.dll) का उपयोग करता है और इसे क्लिपबोर्ड पर भेजता है जो संदेश भेजता है। समस्या यह है कि, पेंट से एक्सेसिबल होने पर, प्रोग्राम परिणामों से इसे नल पॉइंटर्स में पढ़ना।सी #

इस कोड मैं वेब कैमरा कनेक्ट करने के लिए उपयोग करते हैं:

mCapHwnd = capCreateCaptureWindowA("WebCap", 0, 0, 0, 320, 240, 1024, 0); 

SendMessage(mCapHwnd, WM_CAP_CONNECT, 0, 0); 
SendMessage(mCapHwnd, WM_CAP_SET_PREVIEW, 0, 0); 

और यही मैं क्लिपबोर्ड चित्र को कॉपी करने के लिए उपयोग है:

SendMessage(mCapHwnd, WM_CAP_GET_FRAME, 0, 0); 

SendMessage(mCapHwnd, WM_CAP_COPY, 0, 0); 
tempObj = Clipboard.GetDataObject(); 
tempImg = (System.Drawing.Bitmap)tempObj.GetData(System.Windows.Forms.DataFormats.Bitmap); 

कुछ त्रुटि जाँच जो मेरे पास है Theres इसे कम करने के लिए कोड से हटा दिया गया।

अग्रिम

उत्तर

17

मैंने हाल ही में इस क्षेत्र में कुछ शौक काम करना शुरू कर दिया है।

हम लाइब्रेरी का उपयोग opencvdotnet रैपर के साथ करने पर बस गए। यह एक वेब कैमरा से तख्ते पर कब्जा करने का समर्थन करता है:

using (var cv = new OpenCVDotNet.CVCapture(0)) 
{ 
    var image = cv.CreateCompatibleImage(); 
    // ... 
    cv.Release(); 
} 

और अगर आप छवि हेरफेर कर रहे हैं, OpenCV के छवि प्रसंस्करण एल्गोरिदम OpenCVDotNet.Algs विधानसभा के भीतर लपेटा गया है।

यदि आप इस मार्ग पर जाने का निर्णय लेते हैं तो ओपनसीवी संस्करण 1.0 स्थापित करना सुनिश्चित करें (और इसे "c: \ program files \ opencv" पर स्थापित करें यदि आप Vista 64-bit पर हैं, या "mklink OpenCV 'c: \ program फ़ाइलों (x86) \ OpenCV` "सही निर्देशिका से या अन्यथा opencvdotnet स्थापित नहीं होगा)।

+0

भी धन्यवाद देता है धन्यवाद! माइक्रोसॉफ्ट को रहस्यमय त्रुटियों के बारे में थोड़ा सा शाप देने के बाद, मैं इस मार्ग पर गया, मैंने विजुअल सी ++ 2005 एक्सप्रेस स्थापित किया और यह अब बहुत अच्छा काम करता है :) पुनर्वितरण योग्य पैकेज क्यों काम नहीं करता है किसी भी अनुमान है ... –

+4

OpenCV.NET अब बहुत सक्रिय रूप से बनाए रखा नहीं गया है, यदि आप OpenCV.NET –

0

:) धन्यवाद आप Clipboard.GetImage की कोशिश की है()? आप विभिन्न क्लिपबोर्ड को भी आजमा सकते हैं। क्लिपबोर्ड में डेटा को किस प्रारूप में संग्रहीत किया जाता है यह देखने के लिए *() विधियों को शामिल करता है।

+0

मैंने कोशिश की है। यह शून्य –

6

आपके एप्लिकेशन, डायरेक्टशो और डब्ल्यूआईए में कैमरा डेटा प्राप्त करने के वास्तव में दो तरीके हैं। माइक्रोसॉफ्ट अनुशंसा करता है कि आप WIA का उपयोग करें, और डब्ल्यूआईए के लिए इंटरफ़ेस आपके मस्तिष्क को चारों ओर लपेटने के लिए काफी सरल है। मैंने कुछ समय पहले किए गए काम के आधार पर एक ओपन सोर्स WIA desktop library बनाया और प्रकाशित किया।

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

बहुत अच्छा DirectShow library over at SourceForge है। इसके साथ एकमात्र "समस्या" यह वास्तव में जटिल है और यह तथ्य इस तथ्य से उत्पन्न होता है कि डीशो सिर्फ इतना ही जटिल और उलझन में है। ऐसी कई चीजें हैं जो रैपर कर सकती हैं जो काम करना आसान नहीं है, लेकिन वे वीडियो दिखाने या फ्रेम को कैप्चर करने जैसे कई सामान्य उपयोग मामलों के लिए नमूने प्रदान करते हैं। यदि आप ओवरले जोड़ना चाहते हैं, या अन्य फ़िल्टर डालना चाहते हैं, तो यह कर सकता है, लेकिन सावधान रहें कि यह बिल्कुल सरल नहीं है।

+0

के साथ कोई भाग्य नहीं रखते हैं तो इमू सीवी आज़माएं, वास्तव में, डायरेक्टशो आजकल विंडोज विस्टा और 7 के साथ जाने का तरीका है, और यह हाल ही के विंडोज संस्करणों में अभी भी नई सुविधाओं के साथ बहिष्कृत है। – Jonas

0

OpenCV कब्जा, EMGU कब्जा और अन्य सभी पर कब्जा पुस्तकालयों मैं
सभी की कोशिश की है एक ही समस्या है: आप से अधिक 640x480 प्रोग्राम के
नहीं जा सकते (विंडोज़ वीडियो स्रोत विंडो खोलने के बिना)।

मैं इस उपयोग करने का सुझाव (जो काम करता है):
https://github.com/ofTheo/videoInput

0

यह भी How to get web cam images in C#? में पूछा गया था और आपको पता चल सकता निम्नलिखित उपयोगी (स्पैमिंग के क्षमा करें, लेकिन यह वास्तव में सवाल का जवाब देने में मदद करता है):

मैंने अभी अपने विंडोज ऐप कैमटाइमर (.NET/C# में लिखा) का पूरा स्रोत कोड जारी किया है। https://github.com/johanssonrobotics/CamTimer

हैप्पी कोडिंग पर पूरा कोड डाउनलोड करें (देखें वेबकैम उदाहरणों के साथ)