OpenCV / पायथन में कैमरा पैरामीटर सेट करना


86

मैं Thorlabs (DC1545M) से USB कैमरे के साथ OpenCV (2.4) और पायथन (2.7.3) का उपयोग कर रहा हूं।

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

यहाँ कोड है, पायथन में cv2 बाइंडिंग का उपयोग करके, और मैं पुष्टि कर सकता हूँ कि यह चलता है:

import cv2


#capture from camera at location 0
cap = cv2.VideoCapture(0)
#set the width and height, and UNSUCCESSFULLY set the exposure time
cap.set(3,1280)
cap.set(4,1024)
cap.set(15, 0.1)

while True:
    ret, img = cap.read()
    cv2.imshow("input", img)
    #cv2.imshow("thresholded", imgray*thresh2)

    key = cv2.waitKey(10)
    if key == 27:
        break


cv2.destroyAllWindows() 
cv2.VideoCapture(0).release()

संदर्भ के लिए, cap.set () कमांड में पहला तर्क नीचे सूचीबद्ध कैमरा गुणों की गणना को संदर्भित करता है:

0. CV_CAP_PROP_POS_MSEC Current position of the video file in milliseconds.
1. CV_CAP_PROP_POS_FRAMES 0-based index of the frame to be decoded/captured next.
2. CV_CAP_PROP_POS_AVI_RATIO Relative position of the video file
3. CV_CAP_PROP_FRAME_WIDTH Width of the frames in the video stream.
4. CV_CAP_PROP_FRAME_HEIGHT Height of the frames in the video stream.
5. CV_CAP_PROP_FPS Frame rate.
6. CV_CAP_PROP_FOURCC 4-character code of codec.
7. CV_CAP_PROP_FRAME_COUNT Number of frames in the video file.
8. CV_CAP_PROP_FORMAT Format of the Mat objects returned by retrieve() .
9. CV_CAP_PROP_MODE Backend-specific value indicating the current capture mode.
10. CV_CAP_PROP_BRIGHTNESS Brightness of the image (only for cameras).
11. CV_CAP_PROP_CONTRAST Contrast of the image (only for cameras).
12. CV_CAP_PROP_SATURATION Saturation of the image (only for cameras).
13. CV_CAP_PROP_HUE Hue of the image (only for cameras).
14. CV_CAP_PROP_GAIN Gain of the image (only for cameras).
15. CV_CAP_PROP_EXPOSURE Exposure (only for cameras).
16. CV_CAP_PROP_CONVERT_RGB Boolean flags indicating whether images should be converted to RGB.
17. CV_CAP_PROP_WHITE_BALANCE Currently unsupported
18. CV_CAP_PROP_RECTIFICATION Rectification flag for stereo cameras (note: only supported by DC1394 v 2.x backend currently)

मेरे प्रश्न हैं:

क्या अजगर / opencv के माध्यम से कैमरा एक्सपोज़र टाइम (या अन्य कैमरा पैरामीटर) सेट करना संभव है?

यदि नहीं, तो मैं इन मापदंडों को कैसे निर्धारित करूंगा?

नोट: कैमरा निर्माता द्वारा प्रदान किया जाने वाला C ++ कोड है कि यह कैसे करना है, लेकिन मैं C ++ में एक विशेषज्ञ नहीं हूं (एक लंबे शॉट द्वारा) और किसी भी अजगर आधारित समाधान की सराहना करूंगा।

अग्रिम में धन्यवाद!


3
तो 15 वां विकल्प क्या है, यानी CV_CAP_PROP_EXPOSURE? क्या यह एक्सपोज़र का समय नहीं है?
आबिद रहमान के

3
यह है। मैं जो बिंदु बना रहा था, वह यह है कि संशोधित करने की कोशिश किसी भी औसत दर्जे का परिणाम है। (यह वह जगह है cap.set(15, x), जहां xएक औसत दर्जे का परिवर्तन पैदा करने का कोई मूल्य नहीं है ।) वैसे, आपके ब्लॉग के लिए धन्यवाद। यह अजगर के माध्यम से opencv के साथ गति करने के लिए मेरे लिए बेहद उपयोगी रहा है। आप उस के लिए एक उत्थान मिलता है :)
माइक

4
उसने उन्हें गुमराह किया। वे सभी एक उच्च हैं। कृपया इसे संपादित करें।
कास्टिक वायोज

1
@KatasticVoyage किया, अब मुझे सही लगता है :)
linusg

2
Opencv 4 के लिए मुझे संपत्ति के नामों से "CV" उपसर्ग निकालना होगा। तो cv2.CV_CAP_PROP_FRAME_HEIGHT->cv2.CAP_PROP_FRAME_HEIGHT
मार्कस वेबर

जवाबों:


54

सभी कैमरों द्वारा सभी मापदंडों का समर्थन नहीं किया जाता है - वास्तव में, वे ओपनसीवी लाइब्रेरी के सबसे अधिक परेशानी वाले हिस्से में से एक हैं। प्रत्येक कैमरा प्रकार - पेशेवर लोगों के लिए संशोधित करने के लिए एंड्रॉइड कैमरा से लेकर यूएसबी कैमरा तक पेशेवर एक अलग इंटरफ़ेस पेश करते हैं। OpenCV कोड में कई शाखाएं हैं जो उनमें से कई का समर्थन करती हैं, लेकिन निश्चित रूप से सभी संभावनाएं शामिल नहीं हैं।

आप क्या कर सकते हैं अपने कैमरा ड्राइवर की जांच करें, OpenCV के लिए एक पैच लिखें और इसे code.opencv.org पर भेजें। इस तरह से दूसरे आपके काम का आनंद लेंगे, उसी तरह आप दूसरों का आनंद लेंगे। '

एक संभावना यह भी है कि आपका कैमरा आपके अनुरोध का समर्थन नहीं करता है - अधिकांश यूएसबी कैम सस्ते और सरल हैं। शायद वह पैरामीटर संशोधनों के लिए उपलब्ध नहीं है।

यदि आप सुनिश्चित हैं कि कैमरा किसी दिए गए परम का समर्थन करता है (आप कहते हैं कि कैमरा निर्माता कुछ कोड प्रदान करता है) और OpenCV के साथ गड़बड़ नहीं करना चाहता है, तो आप C ++ में उस नमूना कोड को बढ़ावा दे सकते हैं :: python, Python में उपलब्ध कराने के लिए। फिर, इसका उपयोग करने का आनंद लें।


2
मैक लिनक्स खिड़कियों पर opencv के लिए समर्थित कैमरों की एक कार्य सूची है? ऐसा लगता है कि भविष्य में मैं सॉफ्टवेयर के साथ शुरू करूंगा और फिर खरीद से पहले हार्डवेयर पर वापस काम करूंगा। कैमरा ड्राइवर लिखना एक अच्छा लक्ष्य है, लेकिन इससे पहले कि मैं ऐसा करना सीख सकूं, कुछ समय हो जाएगा।
user391339

@sammy मैंने एक प्रश्न पोस्ट किया है कि यह कैसे करना है। क्या आप यहां विस्तार से ध्यान देंगे: stackoverflow.com/questions/27914780/…
evan54

27

मैं रास्पबेरी पाई पर OpenCV के साथ एक ही समस्या थी ... नहीं जानता कि क्या यह आपकी समस्या को हल कर सकता है, लेकिन मेरे लिए क्या काम किया

import time
import cv2


cap = cv2.VideoCapture(0)

cap.set(3,1280)

cap.set(4,1024)

time.sleep(2)

cap.set(15, -8.0)

आपके द्वारा उपयोग किए जाने का समय अलग-अलग हो सकता है


वाह, आपके कोड ने मेरी मैकबुक पर opencv के साथ मेरे logitech c615 वेबकेम का काम किया! "यह सिर्फ काम करता है!" मैं दिनों से यही कोशिश कर रहा था। मुझे नहीं लगता कि यह काफी एचडी है और मुझे यकीन नहीं है कि मैं फोकस मापदंडों को बदल सकता हूं, लेकिन वास्तव में अच्छी शुरुआत।
user391339

2
मैं किसी भी तरह से एक विशेषज्ञ नहीं हूँ, और 3, 4 और 15 मेरे लिए जादू की संख्या हैं। क्या यह CV_CAP_PROP_FRAME_WIDTH जैसे प्रतिस्थापन है?
एलन नोरागार्ड

5
cap.set (15, -8.0) का क्या अर्थ है? मैं अपने लॉजिटेक वेब कैमरा पर एक्सपोज़र का समय निर्धारित करने की कोशिश कर रहा हूं।
user391339

1
@ user391339 क्या आपने लॉजिटेक वेब कैमरा पर एक्सपोज़र का समय निर्धारित किया है?
एबीसी

@ AllanNørgaard हाँ, झंडे सिर्फ भेस में पूर्णांक हैं
Kev1n91

26

VideoCaptureगुणों की पहचान करने के लिए पूर्णांक मानों का उपयोग करने से बचने के लिए , व्यक्ति cv2.cv.CV_CAP_PROP_FPSOpenCV 2.4 और cv2.CAP_PROP_FPSOpenCV 3.0 में उपयोग कर सकता है । (नीचे स्टीफन की टिप्पणी भी देखें।)

यहाँ एक उपयोगिता फंक्शन जो OpenCV 2.4 और 3.0 दोनों के लिए काम करता है:

# returns OpenCV VideoCapture property id given, e.g., "FPS"
def capPropId(prop):
  return getattr(cv2 if OPCV3 else cv2.cv,
    ("" if OPCV3 else "CV_") + "CAP_PROP_" + prop)

OPCV3 इस तरह मेरे उपयोगिताओं कोड में पहले सेट किया गया है:

from pkg_resources import parse_version
OPCV3 = parse_version(cv2.__version__) >= parse_version('3')

2
मैंने 10 मिनट बिताने की कोशिश की, जहाँ उन स्थिरांक को पाइथन में परिभाषित किया गया था - धन्यवाद!
बचाया

2
तुम ठीक कह रहे हैं - यदि आप 2.4.9 (2014-04-25 से स्थिर डाउनलोड की तरह एक संस्करण का उपयोग opencv.org ) आप का उपयोग करने के लिए है cv2.cv.CV_CAP_PROP_XXXXबात - यह देखने के बारे में अधिक infos के लिए code.opencv.org/issues/3181 अगर आप उपयोग की जाने वाली नवीनतम शाखा का उपयोग कर सकते हैंcv2.CAP_PROP_XXXX
स्टीफन क्रुगर

वीडियो कैप्चर जेनेरिक गुणों की नवीनतम सूची यहाँ है (OpenCV 4.3)
मिकोलसन

8

मैं या तो OpenCV की समस्या को ठीक करने में सक्षम नहीं था, लेकिन लिनक्स का उपयोग करते समय OpenCV के साथ एक Video4linux (V4L2) वर्कअराउंड काम करता है । कम से कम, यह रास्पबेरी और मेरे सस्ते वेबकैम के साथ मेरे रास्पबेरी पाई पर करता है। यह उतना ठोस, हल्का और पोर्टेबल नहीं है जितना आप चाहते हैं, लेकिन कुछ स्थितियों के लिए यह बहुत उपयोगी हो सकता है।

सुनिश्चित करें कि आपके पास v4l2-ctl एप्लिकेशन इंस्टॉल है, जैसे डेबियन v4l-utils पैकेज से। आदेश चलाने से पहले (या भीतर से अजगर आवेदन चलाने से पहले):

v4l2-ctl -d /dev/video1 -c exposure_auto=1 -c exposure_auto_priority=0 -c exposure_absolute=10

यह आपके कैमरे के शटर टाइम को मैनुअल सेटिंग्स में ओवरराइट करता है और अंतिम पैरामीटर के साथ (इस उदाहरण में) शटर टाइम (ms में?) को बदलता है। 10. यह मान जितना कम हो, छवि को उतना ही गहरा कर देगा।


यह Ubuntu 14.04 पर चलने वाले मेरे Toshiba Intel- आधारित लैपटॉप पर काम करता है। मैंने फ्रेम दर सहित किसी भी विकल्प को सेट करने के लिए v4l2-ctl का उपयोग किया। मैंने इन सेटिंग्स को OpenCV के साथ करने की कोशिश की, लेकिन उनमें से ऊपर की तरह ही त्रुटियां मिलीं।
डेरेक सिमकोविआक

4

अगर कोई अभी भी सोच रहा है कि मूल्य क्या CV_CAP_PROP_EXPOSUREहो सकता है:

निर्भर करता है। मेरे सस्ते वेबकैम के लिए मुझे वांछित मूल्य सीधे दर्ज करना होगा, जैसे कि 1/10 के लिए 0.1। अपने महंगे औद्योगिक कैमरे के लिए मुझे 2 ^ -5s = 1 / 32s के एक्सपोज़र समय प्राप्त करने के लिए -5 दर्ज करना होगा।


OpenCV का सेट फ़ंक्शन पूर्णांक संख्या को संभाल सकता है?
सईद मासूमि
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.