我正在开发一个基于OpenCV4Android的教程2的Android应用程序。我想要实现的是当我触摸手机屏幕时获得相机帧的Mat对象(onTouch()
)。我想修改代码,以便将图像存储为Mat而不是手机内存中的jpeg文件。然后Mat将进行进一步处理。
我需要涉及onCameraFrame()
函数吗?任何指导将不胜感激。我是非常新的Android开发和OpenCV以及。
注意:我使用的是Android版本4.2.2和OpenCV2.4.8。
- 编辑:**
编辑onTouch()
和onCameraFrame()
函数后,代码片段如下:
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
Mat img = inputFrame.rgba();
if(touched) {
int imgsize = (int) (img.total()*img.channels());
byte[] data = new byte[imgsize];
img.get(0,0,data);
int col = img.cols();
int row = img.rows();
Toast.makeText(this, "size:"+imgsize+" row:"+row+" col:"+col, Toast.LENGTH_SHORT).show();
StartSocket(row, col, imgsize, data);
touched = false;
}
return img;
}
@Override
public boolean onTouch(View v, MotionEvent event) {
Log.i(TAG,"onTouch event");
touched = true;
return true;
}
我所做的基本上是将Mat对象转换为一个名为data[]
的ByteArray
,并通过套接字将其与其他信息一起发送到服务器。当我尝试发送文本文件时,套接字作为一个单独的项目工作正常,因此我相信它没有任何问题。
我没有LogCat
,因为我直接在我的设备上运行应用程序。
2条答案
按热度按时间rqcrx0a61#
如果您想处理来自照相机的图像,是的,您需要onCameraFrame()方法,因为它提供您的图像
b4lqfgs42#
我找到了问题的解决方案。当然,如果没有@berak的帮助,我是不会这么做的。从
LogCat
中,我发现失败是因为线程的问题。所以我将下面几行从onTouch()
移到StartSocket()
函数中:我将把相关的代码片段放在这里,以便其他人使用它。