android摄像头处理图片,在Android上使用opencv将摄像头获取并处理的图片转成视频...
核心代码://该回调函数是button的回调函数,实现的功能是点击button就缓存已保存的图片为视频private void addCallBack() {int fps = 10;int ifourcc = VideoWriter.fourcc('M','J','P','G');org.opencv.core.Size cvSize = new org.opencv.core.Size(cro
核心代码:
//该回调函数是button的回调函数,实现的功能是点击button就缓存已保存的图片为视频
private void addCallBack() {
int fps = 10;
int ifourcc = VideoWriter.fourcc('M','J','P','G');
org.opencv.core.Size cvSize = new org.opencv.core.Size(cropCopyBitmap.getWidth(),cropCopyBitmap.getHeight());
String path = Environment.getExternalStorageDirectory()+"/123/";//需要确保根目录有123这个文件
String name = System.currentTimeMillis() + ""
+ new Random().nextInt(1000000) + ".avi";
String filename = path + name;
VideoWriter writer = new VideoWriter(filename, ifourcc, fps, cvSize);
if(writer.isOpened())
Toast.makeText(getApplicationContext(),"successful!!!",Toast.LENGTH_SHORT).show();
else {
Toast.makeText(getApplicationContext(),"The opening fail!!!",Toast.LENGTH_SHORT).show();
}
for (int i = 0; i < matVideo.size(); i++) {
writer.write(matVideo.get(i));//matVideo是该类的成员变量,在此之前已经缓存了Mat视频帧信息。
//String pathName = path + i + ".jpg";
//imwrite(pathName,matVideo.get(i));
}
writer.release();
Toast.makeText(getApplicationContext(),"视频已缓存",Toast.LENGTH_SHORT).show();
matVideo.clear();
}
注意事项:
首先确保读写SD卡的权限被授予(我被它坑了一天)。
确保路径能够正确访问,最好是使用Android提供的文件API;其次文件名还是用数字吧,可以避免斜杠和字母组成转义字符啥的。
解码格式问题。我尝试了很多种,目前就('M','J','P','G')成功。
其他问题我已经在上篇博客中已提到,上篇。
尝试的解码格式种类如下(有兴趣的也可以去试试):
CV_FOURCC('P','I','M','1') = MPEG-1 codec
CV_FOURCC('M','J','P','G') = motion-jpeg codec
CV_FOURCC('M', 'P', '4', '2') = MPEG-4.2 codec
CV_FOURCC('D', 'I', 'V', '3') = MPEG-4.3 codec
CV_FOURCC('D', 'I', 'V', 'X') = MPEG-4 codec
CV_FOURCC('U', '2', '6', '3') = H263 codec
CV_FOURCC('I', '2', '6', '3') = H263I codec
CV_FOURCC('F', 'L', 'V', '1') = FLV1 codec
更多推荐
所有评论(0)