Java 在openCV android上获取错误:CameraActivity(服务器)';~通道已无法恢复,将被处理
我想用OpenCv对安卓摄像头的画面进行实时图像处理,但我得到了一个错误“通道无法恢复,将被处理!”有人能提供帮助吗。 我猜可能是某个地方的内存泄漏。 这是我的代码:Java 在openCV android上获取错误:CameraActivity(服务器)';~通道已无法恢复,将被处理,java,android,opencv,Java,Android,Opencv,我想用OpenCv对安卓摄像头的画面进行实时图像处理,但我得到了一个错误“通道无法恢复,将被处理!”有人能提供帮助吗。 我猜可能是某个地方的内存泄漏。 这是我的代码: public Mat onCameraFrame(CvCameraViewFrame inputFrame) { //TODO Auto-generated method stub mRgba = inputFrame.rgba(); mGray = inputFrame.gray
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
//TODO Auto-generated method stub
mRgba = inputFrame.rgba();
mGray = inputFrame.gray();
Imgproc.equalizeHist(mGray, mGray);
MatOfRect signs = new MatOfRect();
listSign = new ArrayList<Sign>();
detector.Detect(mGray, signs, 2);
Rect[] dangerArray = signs.toArray();
detector.Detect(mGray, signs, 1);
Rect[] prohibitionArray = signs.toArray();
if ((prohibitionArray.length > 0) && (dangerArray.length > 0)) {
Rect[] matArray = Arrays.copyOf(dangerArray, (dangerArray.length + prohibitionArray.length));
System.arraycopy(prohibitionArray, 0, matArray, dangerArray.length, prohibitionArray.length);
Draw(matArray);
} else if (prohibitionArray.length > 0){
Draw(prohibitionArray);
} else if (dangerArray.length > 0){
Draw(dangerArray);
}
return mRgba;
}
public void Draw(Rect[] facesArray) {
if (facesArray.length <= 0) {
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
listRelativeLayout.setVisibility(View.GONE);
}
});
} else for (int i = 0; i < facesArray.length; i++) {
final int ii = i;
Mat subMat = new Mat();
subMat = mRgba.submat(facesArray[i]);
Sign.myMap.put("Hinh" + i, Utilities.convertMatToBitmap(subMat));
sp.play(soundId, 1, 1, 0, 0, 1);
Imgproc.rectangle(mRgba, facesArray[i].tl(), facesArray[i].br(), FACE_RECT_COLOR, 2);
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
Sign sign = new Sign("unknown", "Hinh" + ii);
listSign.add(sign);
listRelativeLayout.setVisibility(View.VISIBLE);
itemAdapter adapter = new itemAdapter(listSign, CameraActivity.this);
adapter.notifyDataSetChanged();
listDetectedSigns.setAdapter(adapter);
}
});
}
}
public Mat onCameraFrame(CvCameraViewFrame inputFrame){
//TODO自动生成的方法存根
mRgba=inputFrame.rgba();
mGray=inputFrame.gray();
Imgproc.equalizeHist(经理,经理);
MatOfRect符号=新的MatOfRect();
listSign=newarraylist();
检测器。检测(mGray,标志,2);
Rect[]dangerArray=signs.toArray();
检测器。检测(mGray,标志,1);
Rect[]禁止阵列=signs.toArray();
如果((禁止数组长度>0)和(&(危险数组长度>0)){
Rect[]matArray=Arrays.copyOf(dangerArray,(dangerArray.length+banhibitorarray.length));
System.arraycopy(禁止数组,0,matArray,dangerArray.length,禁止数组.length);
绘制(matArray);
}否则如果(禁止数组长度>0){
抽签(禁令);
}否则如果(dangerray.length>0){
抽签(Dangerray);
}
返回mRgba;
}
公共无效绘图(矩形[]面阵列){
如果(facesArray.length),您在这方面有什么进展吗?