سؤال

أحاول تحويل الصور المأخوذة من القبض على (ويب) و بعض العمليات عليها مع بنسف, ولكن أواجه صعوبة..

عند محاولة تحويل الصورة إلى الرمادي ، تعطل البرنامج.(Python.exe قد توقفت عن العمل)

هنا هو الرئيسي مقتطف من التعليمات البرمجية:

newFrameImageGS = cv.CreateImage ((320, 240), cv.IPL_DEPTH_8U, 1)

for i in range(0,5):
    newFrameImage = cv.QueryFrame(ps3eye)
    cv.CvtColor(newFrameImage,newFrameImageGS,cv.CV_BGR2GRAY)
    golfSwing.append(newFrameImageGS)

عندما حاول استخدام cvConvertScale أحصل على تأكيد خطأ:

src.size() == dst.size() && src.channels() == dst.channels()

الأمر الذي يجعل الشعور ولكن أنا حائرة حول كيفية التوجه نحو تحويل المدخلات الصور من كاميرا الويب إلى الصور التي يمكن استخدامها من قبل وظائف مثل cvUpdateMotionHistory() و cvCalcOpticalFlowLK()

أي أفكار ؟ شكرا

تحديث:

أنا حولت الصورة إلى الرمادي يدويا مع هذا:

for row in range(0,newFrameImage.height):
            for col in range(0,newFrameImage.width):
                newFrameImageGS[row,col] = (newFrameImage8U[row,col][0] * 0.114 + # B
                                            newFrameImage8U[row,col][1] * 0.587 + # G
                                            newFrameImage8U[row,col][2] * 0.299)  # R

ولكن هذا يأخذ الكثير من الوقت..وأنا لا تزال لا يمكن معرفة لماذا cvCvtColor تسبب البرنامج إلى تعطل.

هل كانت مفيدة؟

المحلول

لسبب ما ، CvtColor تسبب البرنامج إلى تعطل عند صورة أعماق أين 8 بت.عندما حولت لهم 32 بت البرنامج لم يعد تحطمت كل شيء يبدو على العمل موافق.ليس لدي فكرة لماذا هذا لكن على الأقل يعمل الآن.

newFrameImage = cv.QueryFrame(ps3eye)

newFrameImage32F = cv.CreateImage((320, 240), cv.IPL_DEPTH_32F, 3)
cv.ConvertScale(newFrameImage,newFrameImage32F)

newFrameImageGS_32F = cv.CreateImage ((320,240), cv.IPL_DEPTH_32F, 1)
cv.CvtColor(newFrameImage32F,newFrameImageGS_32F,cv.CV_RGB2GRAY)

newFrameImageGS = cv.CreateImage ((320,240), cv.IPL_DEPTH_8U, 1)
cv.ConvertScale(newFrameImageGS_32F,newFrameImageGS)

نصائح أخرى

هناك خطأ شائع هنا:

كنت تقوم بإنشاء صورة واحدة في newFrameImageGS متغير قبل حلقة ، ثم الكتابة محتوياته في الحلقة ، ثم إلحاق قائمة.فإن النتيجة لن تكون ما كنت تتوقع.القائمة سوف تحتوي على خمس إشارات إلى نفس صورة سبيل المثال في النهاية سوى مرجع الكائن هو إلحاق قائمة ، أي نسخة من وجوه مصنوعة بهذه الطريقة.هذه الصورة تحتوي على آخر الإطار ، حتى تحصل على خمسة من أن الإطار ونتيجة لذلك ، وهو ما لا تريده أعتقد.يرجى مراجعة الثعبان البرنامج التعليمي إذا لم يكن واضحا بالنسبة لك.يمكنك حل هذا عن طريق تحريك السطر الأول من رمز أعلاه في الجسم من حلقة.

آخر الاحتمالات إذا إصلاح أعلاه لن تساعدك:

على CvtColor وظيفة ويبدو أن الصحيح التحويل إلى الرمادي ، لأنه يمكن تحويل عدد من القنوات.

وفقا هذا دليل على CvtColor وظيفة يتطلب وجهة صورة من نفس نوع البيانات كمصدر.يرجى التأكد من أن newFrameImage هو IPL_DEPTH_8U صورة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top