Qt+openCV学习笔记(十四)Qt6.3.0+openCV4.5.5+android_arm64-v8a测试拉取本地摄像头的流

前言

在openCV4.5.2之前,自身的库无法在android下,拉取本地摄像头的流,现在的版本可以拉取了,笔者本次做下记录

在开始前需要读者参考以下文档,编译库

​Qt+openCV学习笔记(十三)openCV4.5.5+android-ndk-r22-windows-x86_64编译动、静态库_꧁白杨树下꧂的博客-CSDN博客

一、编写关键代码

笔者使用Qt6.3.0测试的,关于新建工程、如何引用openCV库,笔者不再重复,直接上关键代码

1.打开摄像头

cv::VideoCapture cap;
cap.open(0);
if (!cap.isOpened())
{
    std::cerr << "can't open camera " << fd << std::endl;
    return -1;
}

 和其他系统下相同,摄像头是从0开始排列的,

若有多个,直接+1就可以,(openCV这点很不友好,期待再加个获取名称的接口)

while(true)
{
    cap >> frame;

    if (frame.empty())
    {
        std::cerr << "cannot find frame" << std::endl;
        break;
    }
    
#ifdef Q_OS_ANDROID
    cvtColor(frame, frame, cv::COLOR_YUV2BGR_NV21);
#endif
    //do something
}

获取一帧也很简单,和其他系统没区别。但是要注意,获取帧的颜色空间与其他平台可能不一样。笔者使用的是华为平板测试,发现获取的帧是yuv格式的,若要在Qt中显示,需要出转换成RGB格式的。

受限于硬件,笔者未测试其他设备,请小伙伴自行测试修改 

二、编译运行

只要库设置正确了,编译就可以正常进行,但笔者运行后提示,没有打开摄像头的权限

 系统设置中却没有摄像头权限,Qt6.3中请求权限接口还是私有的,没办法直接使用,于是笔者增加了Qt多媒体模块,增加摄像头权限后,终于打开了摄像头

 本是件高兴的事,但笔者一旋转平板,傻眼了

Qt+openCV学习笔记(十四)Qt6.3.0+openCV4.5.5+android_arm64-v8a测试拉取本地摄像头的流_第1张图片

 Qt+openCV学习笔记(十四)Qt6.3.0+openCV4.5.5+android_arm64-v8a测试拉取本地摄像头的流_第2张图片

 Qt+openCV学习笔记(十四)Qt6.3.0+openCV4.5.5+android_arm64-v8a测试拉取本地摄像头的流_第3张图片

 openCV获取的图像已经旋转过了,正常使用时,还需要再纠正下

笔者尝试打开前置摄像头,也可以正常拉流。

后记

笔者没有进行分辨率等设置的测试,直接拉取网络流也未成功

感觉当前还是使用Qt的接口轻松点,openCV的还是要再等下

你可能感兴趣的:(Qt,for,android,Qt+openCV,opencv,qt6.3)