我在Android环境中编程,我有一个主线程和一个工作线程。
主线程从视频流中捕获帧(将每一帧保存到Mat对象中),使用org.opencv.android.JavaCameraView打开,并将其时间戳发送到工作线程。工作线程应该能够接收它并使用某些技术处理它。
我发现,如果我在工作线程中使用级联分类器,对于面部检测,从主线程接收的一些消息将丢失。我用时间戳发现了这个,这是mat的一种索引。
如果我不使用级联分类器(“detectMultiScale”方法),接收到的垫子的顺序是:1,2,3,4,5,6,7 ...... 如果我使用级联分类器,我只收到:1,3,5,9等。有些消息丢失了。 为什么这个?我怎么解决?
发送消息的线程:
Message m=Message.obtain();
m.what=123;
m.obj=resultedFrame;
myAsynkTask.mHandler.sendMessage(m);
收到的帖子:
while(running){
synchronized (this) {
Looper.prepare();
mHandler = new Handler(){
public void handleMessage( Message msg ){
if(msg.what==123){
str.setmRgba(((structureMat)msg.obj).getmRgba());
str.setTimestamp(((structureMat)msg.obj).getTimestamp());
if((str.getmRgba())!=null) {
set_finalMat(str.getmRgba());
//Simple Face Detection with a cascade classifier.
faceFound = seg_asynk.findFaceMat(finalMatScaled, frameGrayAsynk, feat_asynk);
}
}
}
};
Looper.loop();
}
}