QQuickPaintedItem から継承するクラスを使用して、openCV でキャプチャされたビデオ フレームを表示しようとしています。
このクラスには、QTimer タイムアウト (40ms) に接続されている queryFrame() というスロットがあります。
connect(m_timer, SIGNAL(timeout()), this, SLOT(queryFrame()));
queryFrame() コード:
void CVCamScreen::queryFrame()
{
if(!m_url.isEmpty()){
if( !m_capture->isOpened() ) {
m_capture->open( m_url.toStdString() );
}
cv::Mat frame;
m_capture->read( frame );
m_qImage = ipl2Qimg(new IplImage(frame));
update();
emit frameChanged();
}
}
queryFrame() が呼び出されるたびに、ビューが更新されます。これを行っていますが、非同期で動作していません。
この CVCamScreen のそれぞれを独立した方法で更新するにはどうすればよいですか?
CamScreens をレンダリングする QML コード:
Repeater {
model: 8
CVCamScreen {
Layout.fillWidth: true
Layout.fillHeight: true
url: Controller.urlCanal(index + 1)
CustomBorder {
commonBorder: true
color: "#228e14"
commonBorderWidth: 3
}
onUrlChanged: {
start(); // starts the timer when the URL changes.
}
}
}