国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

ARM應(yīng)用之瑞芯微RK3568上使用QT+Opencv

這篇具有很好參考價值的文章主要介紹了ARM應(yīng)用之瑞芯微RK3568上使用QT+Opencv。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

手上有一塊RK3568板子,正好官方SDK提供了opencv和QT的環(huán)境,就整個QT+OPENCV的簡單應(yīng)用玩玩。老鐵們可以從整個簡單示例開始疊加復(fù)雜功能了。

  1. 配置編譯文件

直接在qt的配置文件中添加opencv庫即可。

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = usbcamera_gui
TEMPLATE = app
#LIBS += -L. -ljpeg
CONFIG +=gnu++11 -Wl,--allow-shlib-undefined
LIBS += -L. -lopencv_core -lopencv_objdetect -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgproc -lopencv_imgcodecs -lrknn_api -lOpenCL -lpthread
QTPLUGIN += qjpeg

LIBS += -L../../../../../../tools/pack/chips/sun8iw11p1/hal/gpu/fbdev/lib/ -lGLESv2

SOURCES += main.cpp\
        camera.cpp

HEADERS  += camera.h

FORMS    += camera.ui
  1. 處理圖像

這里直接使用USB采集的圖像進行處理。通過ioctl配置參數(shù)。就取了個640*480分辨來看看效果。

int camera::camera_init()
{
    int ret=0,i=0,count=0;
    struct v4l2_capability cap;
    struct v4l2_fmtdesc fmtdesc;
    struct v4l2_format format;
    struct v4l2_requestbuffers reqbuf;
    struct v4l2_buffer buf;

    fmtdesc.index = 0;
    fmtdesc.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
    format.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
    ret = ::ioctl(fd, VIDIOC_G_FMT, &format);
    if(ret < 0){
        perror("VIDIOC_G_FMT");
        exit(1);
    }

    printf("width:%d\n", format.fmt.pix.width);
    printf("height:%d\n", format.fmt.pix.height);
    printf("pixelformat:%x\n", format.fmt.pix.pixelformat);
    printf("field:%x\n", format.fmt.pix.field);
    printf("bytesperline:%d\n", format.fmt.pix.bytesperline);
    printf("sizeimage:%d\n", format.fmt.pix.sizeimage);
    printf("colorspace:%d\n", format.fmt.pix.colorspace);
    format.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
    format.fmt.pix.width = 640;
    format.fmt.pix.height = 480;
    format.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV;

    ret = ::ioctl(fd, VIDIOC_S_FMT, &format);
    if(ret < 0){
        fprintf(stderr, "Not support jepg");
        perror("VIDIOC_S_FMT");
        exit(1);
    }
    reqbuf.count = 3;
    reqbuf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
    reqbuf.memory = V4L2_MEMORY_MMAP;
    ret = ::ioctl(fd, VIDIOC_REQBUFS, &reqbuf);
    if(ret < 0){
        perror("VIDIOC_REQBUFS");
        exit(1);
    }

    bufinf = (struct bufinfor *)calloc(reqbuf.count, sizeof(struct bufinfor));
    if(!bufinf){
        perror("calloc");
        exit(1);
    }
    for(count = 0; count < reqbuf.count; count++){
        buf.index = count;
        buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
        buf.memory = V4L2_MEMORY_MMAP;
        ret = ::ioctl(fd, VIDIOC_QUERYBUF, &buf);
        if(ret < 0){
            perror("VIDIOC_REQBUFS");
            exit(1);
        }
        bufinf[buf.index].length = buf.length;
        bufinf[buf.index].start = mmap(NULL, buf.length, PROT_READ | PROT_WRITE, MAP_SHARED, fd, buf.m.offset);
        if(!(bufinf[buf.index].start)){
            perror("mmap");
            exit(1);
        }
    }
    for(i = 0; i < reqbuf.count; i++){
        buf.index = i;
        buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
        buf.memory = V4L2_MEMORY_MMAP;
        ret = ::ioctl(fd, VIDIOC_QBUF, &buf);
        if(ret < 0){
            perror("VIDIOC_QBUF");
            exit(1);
        }
    }
    enum v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
    ret = ::ioctl(fd, VIDIOC_STREAMON, &type);
    if(ret < 0){
        perror("VIDIOC_STREAMON");
        exit(1);
    }

    return 0;
}

還是通過ioctl映射出原始的圖像數(shù)據(jù),這里將圖像的YUV數(shù)據(jù)轉(zhuǎn)為bgr。在opencv中一般輸入的是bgr圖像進行處理。

    unsigned char *bgr=new unsigned char [640 * 480 *3];
    struct v4l2_buffer buf;

    fd_set readset;
    FD_ZERO(&readset);
    FD_SET(fd, &readset);
    ret = select(fd + 1, &readset, NULL, NULL, NULL);
    if(ret < 0){
        perror("select");
        exit(1);
    }

    buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
    buf.memory = V4L2_MEMORY_MMAP;
    ret = ioctl(fd, VIDIOC_DQBUF, &buf);
    if(ret < 0){
        perror("VIDIOC_DQBUF");
        exit(1);
    }

    convert_yuv_to_bgr_buffer((unsigned char *)bufinf[buf.index].start,bgr,640,480);
    ret = ioctl(fd, VIDIOC_QBUF, &buf);
    if(ret < 0){
        perror("VIDIOC_QBUF");
        exit(1);
    }
  1. 處理圖像

將bgr數(shù)據(jù)導(dǎo)入Mat數(shù)據(jù),注意opencv中使用的是行和列,即cols和rows,cols就是圖像的寬度width,rows就是圖像的高度height。所以這里是480, 640。下面就是opencv的常規(guī)操作了。

    Mat img = Mat(480, 640, CV_8UC3, bgr, 0);
    Mat dstImage, edge, grayImage;
    dstImage.create(img.size(), img.type() );
    cvtColor(img, grayImage, CV_BGR2GRAY);
    blur(grayImage, edge, Size(3,3) );
    Canny(edge, edge, 10, 30, 3 );
    cvtColor(edge, dstImage, CV_GRAY2BGR);
    addWeighted(img, 1, dstImage, 0.5, 1, img);

    putText(img, "QT+OPENCV", Point(120,100),FONT_HERSHEY_TRIPLEX,2,0,2,8);
  1. 顯示圖像

QT一般使用的是RGB圖像,所以注意得轉(zhuǎn)換一下,不然那顏色就反了。將Mat圖像數(shù)據(jù)轉(zhuǎn)為QImage即可。

    cvtColor(img, dstImage, CV_BGR2RGB);
    QImage *mage = new QImage(dstImage.data,640,480,QImage::Format_RGB888);
    QImage resultimg=mage->scaled(ui->label->size(),Qt::KeepAspectRatio,Qt::SmoothTransformation);
    ui->label->setPixmap(QPixmap::fromImage(resultimg, Qt::AutoColor));

如此一個簡易的QT+Opencv應(yīng)用就完成了。工程附上,老鐵們可以開始進階了。

QT+Opencv的應(yīng)用示例文章來源地址http://www.zghlxwxcb.cn/news/detail-533663.html

到了這里,關(guān)于ARM應(yīng)用之瑞芯微RK3568上使用QT+Opencv的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 瑞芯微rk3568移植openharmony3.1(鴻蒙)

    openharmony的移植推薦使用Ubuntu18.04,需要安裝的依賴庫文件。 獲取openharmony官方源碼。 下載完成后,可以改一下調(diào)試口的波特率,因為默認(rèn)的是1500000,串口工具會有亂碼,或者出現(xiàn)無法輸入的問題,修改為115200??梢灾苯有薷哪_本文件。腳本文件有規(guī)則限制,只改一下波特率

    2024年02月11日
    瀏覽(91)
  • 史上最全! 瑞芯微RK3568核心板評估板資源分享!

    史上最全! 瑞芯微RK3568核心板評估板資源分享!

    高性能處理器 :采用四核A55架構(gòu)CPU,G52 GPU;內(nèi)置NPU,可提供1T算力 高可靠性設(shè)計 :支持DDR及CPU Cache全鏈路ECC 內(nèi)置自研ISP圖像處理器 :8M@30fps處理能力,強大的HDR功能,支持畸變矯正、去霧、噪點消除等功能 豐富的顯示、外設(shè)及拓展接口 :內(nèi)置HDMI/eDP/LVDS/MIPI/RGB/T-CON顯示接口

    2023年04月27日
    瀏覽(91)
  • 瑞芯微RK3568開發(fā)板保姆級護航入門學(xué)習(xí)嵌入式

    瑞芯微RK3568開發(fā)板保姆級護航入門學(xué)習(xí)嵌入式

    專為3568編寫|迅為原創(chuàng)|拒絕網(wǎng)絡(luò)拼湊 20+個手冊2800+頁手冊進行結(jié)構(gòu)分層適用于學(xué)習(xí)與開發(fā) 為了方便大家清晰快速的學(xué)習(xí),迅為iTOP-3568開發(fā)板手冊資料全面升級,對手冊內(nèi)容進行了結(jié)構(gòu)分層,共計20+個文檔,超2800+頁的資料專為iTOP-3568開發(fā)板編寫。適用于各種層面的學(xué)習(xí)者學(xué)習(xí)

    2024年02月14日
    瀏覽(89)
  • 瑞芯微RK3568/RK3588平臺YOLOV5實時視頻算法的部署小白教程

    瑞芯微RK3568/RK3588平臺YOLOV5實時視頻算法的部署小白教程

    本文實現(xiàn)整體的部署流程比較小白,首先在PC上分別實現(xiàn)工程中的模型仿真推理、yolov5-pytorch仿真推理、自己訓(xùn)練yolov5模型仿真推理,完成仿真之后再在板端分別實現(xiàn)rk提供模型的板端推理、yolov5-pytorch板端推理、自己訓(xùn)練的yolov5模型板端推理,最后實現(xiàn)自己訓(xùn)練的yolov5模型實

    2024年02月06日
    瀏覽(221)
  • 輕量級實時跟蹤算法NanoTrack在瑞芯微RK3588上的部署以及使用

    輕量級實時跟蹤算法NanoTrack在瑞芯微RK3588上的部署以及使用

    文章目錄 前言 一、模型轉(zhuǎn)換 1.環(huán)境配置 2.模型解構(gòu) 二、rk3588平臺使用 1.模型初始化 2.推理 github: https://github.com/Try2ChangeX/NanoTrack_RK3588_python: python版本基于rk3588的NanoTrack,每秒可達(dá)120FPS 主要參考: SiamTrackers/NanoTrack at master · HonglinChu/SiamTrackers · GitHub GitHub - rockchip-linux/rknn-tool

    2024年02月13日
    瀏覽(33)
  • 瑞芯微RK3588,交叉編譯opencv

    這里以opencv-4.6.0為例子。 下載: opencv-4.6.0 opencv_contrib-4.6.0 .cache 提取碼:0816 eigen-3.3.9. ffmpeg-6.0 yasm-1.3.0 交叉編譯器_gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu.tar.xz 注意:不要關(guān)閉當(dāng)前終端!后面編譯opencv也在當(dāng)前終端。這里很重要! 安裝libgtk2.0-dev時的報錯,解決方案 以上,有

    2024年02月08日
    瀏覽(93)
  • OpenHarmony實戰(zhàn):瑞芯微RK3566移植案例(中)

    OpenHarmony實戰(zhàn):瑞芯微RK3566移植案例(中)

    上篇文章:OpenHarmony實戰(zhàn):瑞芯微RK3566移植案例(上) 常見的INPUT設(shè)備有鍵盤、鼠標(biāo)、游戲桿、Touch Screen等。Touch 設(shè)備與主機通訊采用標(biāo)準(zhǔn) I2C 總線,觸屏 IC 提供中斷支持,提高了觸屏數(shù)據(jù)的實時性。本項目的觸摸屏器件IC 為 GT911。 驅(qū)動框架模型 INPUT驅(qū)動模型 INPUT 驅(qū)動模型核

    2024年04月23日
    瀏覽(99)
  • 迅為RK3588開發(fā)板-基于瑞芯微RK3588攝像頭方案

    迅為RK3588開發(fā)板-基于瑞芯微RK3588攝像頭方案

    硬件: RK3588開發(fā)板+攝像頭 ? MIPI攝像頭: ? 1.1 硬件連接 RK3588?底板上有四個攝像頭接口,如下圖所示,此四個接口均可連接攝像頭?ov5695?和?攝像頭?ov13850。 ? 攝像頭模塊連接硬件時要將模塊對準(zhǔn)插槽缺口處,J1?接口連接攝像頭模塊如下圖所示: ? J2?接口連接攝像頭模塊

    2024年02月09日
    瀏覽(116)
  • 瑞芯微RK3576 |牽頭AIoT技術(shù)潮流,全新震撼來襲!

    瑞芯微RK3576 |牽頭AIoT技術(shù)潮流,全新震撼來襲!

    深圳觸覺智能科技有限公司 (industio.cn) 在快節(jié)奏的人工智能物聯(lián)網(wǎng)(AIOT)領(lǐng)域,瑞芯微(Rockchip)全新推出的RK3576處理器橫空出世。RK3576以其領(lǐng)先技術(shù)和卓越性能,為智能設(shè)備注入了無限的可能性,實現(xiàn)了更加智能和互動的體驗。 下面讓我們談?wù)勥@款瑞芯微旗下最新的AIOT芯

    2024年04月11日
    瀏覽(92)
  • 瑞芯微RK3588 C++部署Yolov8檢測和分割模型

    瑞芯微RK3588 C++部署Yolov8檢測和分割模型

    最近這一個月在研究國產(chǎn)瑞芯微板子上部署yolov8的檢測和分割模型,踩了很多坑,記錄一下部署的過程和遇到的一些問題: 需要的環(huán)境和代碼主要包括: (1)rknn-toolkit2-1.5.2:工具鏈,開發(fā)環(huán)境 (2)rockchip-yolov8:pt模型轉(zhuǎn)onnx模型 (3)yolov8_onnx2rknn:在(2)的基礎(chǔ)上轉(zhuǎn)檢測

    2024年04月09日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包