java – 在Android中使用OpenCV将NV21转换为RGB
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 在Android中使用OpenCV将NV21转换为RGB,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1937字,纯文字阅读大概需要3分钟。
内容图文
![java – 在Android中使用OpenCV将NV21转换为RGB](/upload/InfoBanner/zyjiaocheng/802/308297ec7e8641b59f48d871d2aa2aa8.jpg)
我想在Android中使用OpenCV.所以我首先通过并排放置两个SurfaceView来测试OpenCV.一个SurfaceView用于从相机预览输出(输出格式显然是NV21).另一个SurfaceView在通过OpenCV后显示相同的预览,如下面的代码所示:
public void onPreviewFrame(byte[] data, Camera camera) {
// TODO Auto-generated method stub
if( mYuv != null ) mYuv.release();
mYuv = new Mat( height + height/2, width, CvType.CV_8UC1 );
mYuv.put( 0, 0, data);
Mat mRgba = new Mat();
Imgproc.cvtColor( mYuv, mRgba, Imgproc.COLOR_YUV2RGB_NV21, 4 );
Bitmap map = Bitmap.createBitmap( width, height, Bitmap.Config.ARGB_8888 );
Utils.matToBitmap( mRgba, map );
preview.setBackgroundDrawable( new BitmapDrawable( map ));
mRgba.release();
}
但是通过OpenCV后产生的图像是一个绿色的,有条理的……事情:
有任何想法吗?
编辑:
根据评论修改了一点代码.
public void onPreviewFrame(byte[] data, Camera camera) {
// TODO Auto-generated method stub
if( mYuv != null ) mYuv.release();
mYuv = new Mat( height + height/2, width, CvType.CV_8UC1 );
mYuv.put( 0, 0, data );
Mat mRgba = new Mat();
Imgproc.cvtColor( mYuv, mRgba, Imgproc.COLOR_YUV2RGBA_NV21, 4 );
Bitmap map = Bitmap.createBitmap( width, height, Bitmap.Config.ARGB_8888 );
Utils.matToBitmap( mRgba, map );
preview.setBackgroundDrawable( new BitmapDrawable( where.getResources(), map ));
mRgba.release();
}
结果如下:
解决方法:
好吧,我弄清楚我在哪里乱了.
我最初做了这样的事情:
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
this.width = width; this.height = height;
params.setPreviewSize( width, height );
camera.setParameters( params );
camera.startPreview();
}
问题是,android上的摄像头只支持特定的预览分辨率.因此我设置的具体分辨率不起作用.所以,我改成了这个:
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
Size size = params.getPreviewSize();
this.height = size.height;
this.width = size.width;
camera.setParameters( params );
camera.startPreview();
}
然后一切正常!老实说,这不是我预期的错误,所以这不是一个很好的问题.
内容总结
以上是互联网集市为您收集整理的java – 在Android中使用OpenCV将NV21转换为RGB全部内容,希望文章能够帮你解决java – 在Android中使用OpenCV将NV21转换为RGB所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。