QT调用OpenCV绘制直线、矩形、椭圆、圆、不规则曲线、文本

news/2024/4/28 5:38:32/文章来源:https://blog.csdn.net/xqf222/article/details/127631408

开发环境:QT5.14.2+OpenCV4.5

提前准备:准备编译好的OpenCV开发环境(如自行编译的mingw版的opencv库,本地路径D:\opencv\qt_build64),准备一张测试图片(如:d:\test.jpg)。

项目结构:

 

核心代码:

 1、QtFace.pro代码

#opencv在mingw里的标准引用
INCLUDEPATH+=D:\opencv\qt_build64\install\include \             D:\opencv\qt_build64\install\include\opencv2 
LIBS+=D:\opencv\qt_build64\install\x64\mingw\lib\libopencv_*.a
2、mainwindow.h代码

#include <QMainWindow>
#include <opencv2/opencv.hpp>
using namespace cv;

3、mainwindow.cpp代码
//绘制直线
void MainWindow::on_actionDrawLine_triggered()
{cv::String fileName = "D:\\test.jpg";cv::Mat src = cv::imread(fileName);if(src.data == NULL){printf("图像读入失败\n");return;}cv::Point pt1= cv::Point_<int>(100,10);cv::Point pt2= cv::Point_<int>(100,200);cv::line(src,pt1,pt2, cv::Scalar(0,255,255),4);imshow("绘制直线",src);waitKey(0);destroyAllWindows();
}
//绘制矩形
void MainWindow::on_actionDrawRect_triggered()
{cv::String fileName = "D:\\test.jpg";cv::Mat src = cv::imread(fileName);if(src.data == NULL){printf("图像读入失败\n");return;}cv::Point pt3= cv::Point_<int>(50,50); // 矩阵左上角顶点cv::Point pt4=cv::Point_<int>(100,100);  // 矩形右下角顶点cv::rectangle(src,pt3,pt4,cv::Scalar(255,0,0),4);

    imshow("绘制矩形",src);
    waitKey(0);
    destroyAllWindows();

}
//绘制椭圆
void MainWindow::on_actionDrawEllipse_triggered()
{

    cv::String fileName = "D:\\test.jpg";
    cv::Mat src = cv::imread(fileName);
    if(src.data == NULL){
        printf("图像读入失败\n");
        return;
    }

    cv::RotatedRect box = cv::RotatedRect(cv::Point_<float>(100,100), cv::Size2f(200.0,200.0),45);
    cv::ellipse(src, box, cv::Scalar(0,255,0), 4);

    imshow("绘制椭圆",src);
    waitKey(0);
    destroyAllWindows();
}
//绘制圆形
void MainWindow::on_actionDrawCircle_triggered()
{

    cv::String fileName = "D:\\test.jpg";
    cv::Mat src = cv::imread(fileName);
    if(src.data == NULL){
        printf("图像读入失败\n");
        return;
    }

    cv::circle(src, cv::Point(300,300), 150,cv::Scalar(255,255,255),4);

    imshow("绘制圆形",src);
    waitKey(0);
    destroyAllWindows();
}
//绘制不规则曲线
void MainWindow::on_actionDrawPolyLines_triggered()
{
    cv::String fileName = "D:\\test.jpg";
    cv::Mat src = cv::imread(fileName);
    if(src.data == NULL){
        printf("图像读入失败\n");
        return;
    }

    std::vector<cv::Point> pts;
    pts.push_back(cv::Point(1,0));
    pts.push_back(cv::Point(20,50));
    pts.push_back(cv::Point(100,50));
    pts.push_back(cv::Point(100,300));
    cv::polylines(src,pts,false, cv::Scalar(0,255,0),5);

    imshow("绘制不规则曲线",src);
    waitKey(0);
    destroyAllWindows();
}
//绘制文字
void MainWindow::on_actionDrawText_triggered()
{

    cv::String fileName = "D:\\test.jpg";
    cv::Mat src = cv::imread(fileName);
    if(src.data == NULL){
        printf("图像读入失败\n");
        return;
    }

    cv::putText(src, "测试文字", cv::Point(50,100),cv::FONT_HERSHEY_PLAIN, 2,cv::Scalar(0,0,255),2);

    imshow("绘制文字",src);
    waitKey(0);
    destroyAllWindows();
}

运行截图:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_410387.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

零零信安-DD数据泄露报警日报【第31期】

01 概述 2022.10.26共发现匿名网络资讯信息70,642条&#xff1b;最近7天共发现匿名网络资讯信息472,185条&#xff0c;同比增长-42%&#xff1b;最近30天共发现匿名网络资讯信息2,498,093 条。 D&D评论&#xff1a; 国际上&#xff0c;近日监测到国外公司源代码泄漏事件增加…

Web响应式(二)

内容:媒体查询 媒体查询语法 组合媒体查询一、媒体查询 媒体查询,可以根据设备的能力应用特定的CSS样式。比如,可以根据视口宽度、屏幕宽高比和朝向(水平还是垂直)等,只用几行CSS代码就改变内容的显示方式。 二、媒体查询语法 媒体查询类型大全媒体查询属性大全:例子: …

理解vim工作的几个关键字

理解vim工作的几个关键字 下面我们再来认识一下 vim ,理清下面的 vim 的几个名词,这样方便我们以后更好的去使用和进阶vim : 缓冲区(Buffer), 窗口 (Window ) , 标签(Tab) , 标记(Mark ), 寄存器(Register) , 插件(Plugin) , vim 脚本(VimScript)。 缓冲区(buffer) 什…

【LeetCode】移除元素、删除有序数组中的重复项、合并两个有序数组

&#x1f9d1;‍&#x1f4bb;作者&#xff1a; 情话0.0 &#x1f4dd;专栏&#xff1a;《LeetCode》 &#x1f516;题目链接&#xff1a;移除元素、删除有序数组中的重复项、合并两个有序数组 目录一、移除元素示例 1&#xff1a;示例 2&#xff1a;理解思路1&#xff1a;代码…

Linux——页面置换算法(OPT、FIFO、LRU的实现与比较)

目录 1、 实验题目 2、实验要求 &#xff08;1&#xff09;指令的地址按下述原则生成 &#xff08;2&#xff09;具体的实施方法 &#xff08;3&#xff09;将指令序列变换为页地址流 3、算法实现参考代码&#xff1a; 4、运行结果 5、算法比较 1、 实验题目 设计一个虚…

使用Git Bash Here代码上传本地项目到GitLab

使用Git Bash Here代码上传本地项目到GitLab,上传到到GitHub等其它项目管理也类似。 一、第一次用代码上传项目 1.使用Git Bash Here打开代码输入框&#xff0c;创建克隆目录&#xff1a; git clone xxx/androidprojects.git 2. 把项目放到创建的目录下&#xff0c;并代码进…

Side Window Filtering 论文笔记

引言 Side Window Filtering是上了数字图像处理这门课后看的第二篇论文&#xff0c;这是一篇2019年发表的论文&#xff0c;提出的技术方法也相对比较新。由于我对CV方面涉猎不多&#xff0c;所以看的时候比较懵&#xff0c;似懂而非懂&#xff0c;于是打算做点笔记&#xff0c…

珠宝加工厂:我的成本下降空间在哪里?

摘要&#xff1a;珠宝加工厂&#xff0c;如何通过IoT边缘技术&#xff0c;OT/IT数据融合&#xff0c;实现成本的下降、效率的提升本文分享自华为云社区《玩转物联网IoT边缘服务系列二-珠宝加工的成本下降空间在哪里&#xff1f;》&#xff0c;作者&#xff1a;eleven1111 。 本…

小程序配置详解

小程序新生成时的目录 有4中不同的文件类型 .json 后缀的 JSON 配置文件.wxml 后缀的 WXML 模板文件.wxss 后缀的 WXSS 样式文件.js 后缀的 JS 脚本逻辑文件json app.json 是对当前小程序的全局配置&#xff0c;包括了小程序的所有页面路径、界面表现、网络超时时间、底部 ta…

elasticsearch、kibana、Ik分词器基于docker的单点部署

一、创建网络 由于需要让es和kibana容器互联&#xff0c;因此需要先创建一个网络。 但当也可以使用docker-compose的方式来完成一键互联&#xff0c;那样的话就不需要创建网络。 docker network create es-network二、安装elasticsearch 2.1 dockerHub直接拉取镜像的方式 …

AWS 使用Lambda实现钉钉机器人报警

aws 支持邮件和短信的报警通知&#xff0c;考虑时效性问题和结合公司的使用情况&#xff0c;需要接入钉钉机器人的告警提醒&#xff0c;为了使用钉钉机器人的告警&#xff0c;我们利用LambdaSNS&#xff0c;利用Lambda接受SNS的警告信息&#xff0c;然后通过python发送到钉钉机…

Git快速入门

本文是我在学习过程中记录学习的点点滴滴&#xff0c;目的是为了学完之后巩固一下顺便也和大家分享一下&#xff0c;日后忘记了也可以方便快速的复习。 Git前言一、版本控制1.1、常见的版本控制工具二、版本控制分类2.1、本地版本控制2.2、集中版本控制 SVN2.3、分布式版本控制…

从0到1实现python基于RPC协议的接口自动化测试

01、什么是RPC RPC&#xff08;Remote Procedure Call&#xff09;远程过程调用协议是一个用于建立适当框架的协议。从本质上讲&#xff0c;它使一台机器上的程序能够调用另一台机器上的子程序&#xff0c;而不会意识到它是远程的。 RPC 是一种软件通信协议&#xff0c;一个程…

记一次VMOS Pro破解记录

vmos pro是在安卓上运行的安卓模拟器&#xff0c;自带root&#xff0c;免root运行Xposed&#xff0c;免root运行Magisk等&#xff0c;支持修改分辨率&#xff0c;支持谷歌GMS服务&#xff0c;后台可持续运行. 背景 意外发现这么一款好玩的虚拟机但使用起来有诸多限制&#xff…

科研快报|全长扩增子测序揭示口腔微生态变化可用作阿尔兹海默症识别指标

背景介绍 阿尔茨海默病&#xff08;AD&#xff09;是一种神经退行性疾病&#xff0c;通常影响老年人。由于老年人患牙根龋和缺牙的发病率较高&#xff0c;这些牙齿问题中涉及的细菌可能会恶化他们的认知功能。口腔中微生物群的改变可能通过从口腔迁移到大脑而诱发神经炎症。然…

Spring IOC 核心流程介绍

前言 接下来我们编写入口代码&#xff0c;跟代码梳理一下Spring IOC一些重要的方法节点。IOC有12个比较重要的方法&#xff0c;把这12个方法学习一下&#xff0c;整个Spring IOC基本就差不多了。 编写Spring IOC入口 1、创建需要被管理的类 接口类&#xff1a; package se…

爱尔兰药品局药品信息数据查询

爱尔兰位于欧洲西部的爱尔兰岛中南部&#xff0c;多年来实施低税率国家政策&#xff0c;吸引着全球各大巨头公司&#xff0c;如苹果、谷歌、脸书等巨头&#xff0c;其中不乏包含很多医药企业&#xff0c;如世界级生物医药巨头辉瑞&#xff08;Pfizer&#xff09;、诺华&#xf…

刷题笔记(牛客java选择题)

目录 访问权限修饰符 抽象类和接口 线性安全的集合类 线性不安全的集合类 方法重载与重写 getDeclaredMethods方法 浮点型 和 long 不能做 switch() 的参数类型 java程序运行命令 字符串的不可变性 访问权限修饰符 抽象类和接口 使用abstract修饰的类或方法&#xff0c;就…

MacOS安装FFmpeg

MacOS安装FFmpeg方式一、使用Homebrew安装FFmpeg1. 安装Homebrew2. 安装FFmpeg方式二、通过官网安装FFmpeg方式一、使用Homebrew安装FFmpeg 1. 安装Homebrew 如果你的Mac上没有安装Homebrew&#xff0c;那么就先来安装Homebrew吧&#xff01;步骤如下&#xff1a; 打开Termi…

学习笔记-Linux 安全

Linux 安全 免责声明 本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关. 漏洞利用 OS-Exploits LOL Living Off The Land 相关文章 busybox docker 受限环境下回传文件命令行上线小技巧 相关资源 GTFOBinshttps://github.com…