سؤال

أنا أستخدم فئة معالج فيديو OpenCV مخصصة في تطبيق QtGui الخاص بي.يحتوي My MainWindow على 2 ViewerWidgets لعرض إطارات الإدخال والإخراج التي ينتجها كائن VideoProcessor.يأخذ VideoProcessor-Object مؤشرات على أدوات ViewerWidgets لعرض الإطارات التي تمت معالجتها على هذه الأدوات.

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

هذه هي فتحة MainWindow التي تبدأ المعالجة: Genacodicetagpre

وهذا هو معالج الفيديو.الملف من OpenCV Cookbook وقمت بتغييره لأخذ المؤشرات إلى ViewerWidgets في وظيفة run () في نهاية الكود أدناه. Genacodicetagpre

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

المحلول

على الرغم من أنني لم أتمكن من معرفة السبب المحدد لمشكلتي ، فقد وجدت أخيرًا حلًا يناسبني:

كما اقترحت ، فقد تخلصت من فئة VideoProcessor-Utility هذه ونفذت Processing-Loop لمعالجة تسلسلات الإطارات داخل MainWindow باستخدام QTimer للتأخير بين كل إطار.

بدلاً من VideoProcessor-Class ، صنعت "ProcessorWidget". توفر أداة واجهة المستخدم الرسومية هذه جميع عناصر التحكم في الإدخال لتحديد معلمات لكل وظيفة معالج قمت بتنفيذها حتى الآن.

كل كود OpenCV موجود الآن في فئة ProcessorWidget ولديه فتحة عامة cv :: Mat (إدخال cv :: Mat) والتي تأخذ فقط إطار الإدخال ثم تقوم بتحليل جميع معلمات إدخال المستخدم من واجهة المستخدم الرسومية وتتعامل مع اختيار المعالج المناسب والمعلمات داخليًا.

ينشئ MainWindow الآن ViewerWidgets و ProcessorWidget ويملك Control and Timing.

أصبحت معالجة الإطار وعرضه الآن فقط: Genacodicetagpre

وإذا أردت إضافة المزيد من ميزات OpenCV ، فلا داعي لتغيير النافذة الرئيسية أو واجهة المستخدم الرسومية. كل ذلك يتم في فئة ProcessorWidget.

نصائح أخرى

تتعامل نافذة highgui الخاصة بـ openCV مع حلقة الحدث الخاصة بها - لا يمكنك (بسهولة) مزجها مع حلقة حدث QMainWindows.

الطريقة السهلة هي التقاط الصورة في openCV وعرضها في Qt باستخدام Qimage و QPainter - تنسيق 24bit RGB888 من QImage متوافق مع CV_8UC3 الخاص بـ opencv

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