应用程序检测框架上的特定颜色并使用OpenCV绘制轮廓。当单击捕获按钮时,帧图像将用于进行一些图像处理,而绘制的轮廓也是用帧捕获的,这不是我想要的。 我的问题是如何删除单击捕获按钮时绘制的轮廓。或者是否有任何方法可以在没有绘制轮廓的情况下获取框架?
我尝试的方法:
但他们两个都没有用。
我正在考虑暂停onCapture(),直到onCameraFrame被调用并多次跳过绘制轮廓线以确保框架上没有绘制任何内容。但我不知道如何处理两个synchronized()。
public boolean onTouch(View v, MotionEvent event) {
lock = true;
if (event.getAction() == MotionEvent.ACTION_DOWN) {
//do something
} else if (event.getAction() == MotionEvent.ACTION_UP) {
//do something
//↓to make sure onCameraFrame is pause before the finger left the screen
lock = false;
synchronized (locker) { locker.notify(); }
}
return true;
}
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
//Pause until onTouch() is done
commandLocker();
//Detect the contour
mDetector.setHsvColor(txtHsv);
if (area) {
nRgba = mRgba.submat(ey, sy, sx, ex);
mDetector.process(nRgba);
} else {
mDetector.process(mRgba);
}
//Skip this when onCapture is called
//Draw the contour on the frame
if (!capture) {
List<MatOfPoint> contours = mDetector.getContours();
if (nRgba != null && area) {
Imgproc.rectangle(mRgba, new Point(sx, sy), new Point(ex, ey), areaColor, 3);
Imgproc.drawContours(nRgba, contours, -1, contourColor);
} else
Imgproc.drawContours(mRgba, contours, -1, contourColor);
}
return mRgba;
}
public void onCapture(View view) throws IOException {
capture = true;
//Pause until onCameraFrame() done
if (!area)
subColor(mRgba);
else
subColor(nRgba);
}
public void subColor (Mat src) throws IOException {
//do something
}
private void commandLocker() {
synchronized (locker) {
while (lock) {
try {
locker.wait();
} catch (InterruptedException e) {
Log.e("Exception", "InterruptedException");
}
}
}
}
答案 0 :(得分:0)
在onCameraFrame(CvCameraViewFrame inputFrame)
函数中,如果条件:
if (nRgba != null)
不满意,您可以通过mRgba
Imgproc.drawContours(mRgba, contours, -1, contourColor);
这是你的问题吗?