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

news2025/2/24 15:01:17

开发环境: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.coloradmin.cn/o/2681.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如果再来一次,你还会选择互联网么?

现在互联网的就业环境&#xff0c;大家都在感受着一股寒意。也不知道从什么时候开始&#xff0c;身边悲观的声音越来越多了。 如果再给你一次机会&#xff0c;你还会选择互联网吗&#xff1f; 回答这个问题之前&#xff0c;我想跟大家聊聊一个我朋友的故事。 他从学渣到大厂程…

64位下使用回调函数实现监控

前言 在32位的系统下&#xff0c;我们想要实现某些监控十分简单&#xff0c;只需要找到对应的API实现挂钩操作即可检测进程。但在64位系统下随着Patch Guard的引入&#xff0c;导致我们如果继续使用挂钩API的方式进行监控会出现不可控的情况发生。微软也考虑到了用户程序的开发…

Linux shell脚本之笔记及实用笔记

一、前言 二、shell脚本之数据类型 2.1、数组遍历 1)数组定义 如果说变量是存储单个变量的内存空间,那么数组就是多个变量的集合,它存储多个元素在一片连续的内存空间中。在bash中,只支持一维数组,不支持多维数组。Linux Shell 数组用括号来表示,Bash Shell 只支持一维…

15. “接口隔离模式”之 Proxy模式

1. 动机 在面向对象系统中&#xff0c;有些对象由于某些原因&#xff08;比如对象创建的开销很大&#xff0c;或者某些操作需要安全控制&#xff0c;或者需要进程外的访问等&#xff09;&#xff0c;直接访问会给使用者、或者系统结构带来很多麻烦。如何在不失去透明操作对象的…

Java中值得注意的『运算符、逻辑控制、输入输出』

目录前言一、运算符&#x1f351;1、取模运算符%&#x1f351;2、增量运算符&#x1f351;3、逻辑运算符&#x1f351;4、位运算符二、逻辑控制语句&#x1f351;1、switch语句三、Java输入和输出&#x1f351;1、输出到控制台&#x1f351;2、从键盘输入四、猜数字游戏——Jav…

软件过程与项目管理复习(1)

文章目录Week1Project Introduction定义特点Project management项目管理的价值项目管理的5要素Project manager项目经理的技能要求project manager 的核心任务&#xff08;key activities)规划 planning组织 organizing领导 leading掌控 controllingAgile Scrum master 的核心任…

结构体超详解(小白一看就懂,多维度分析!!!!)

目录 一、前言 二、结构体详解 &#x1f350;什么是结构体 &#x1f34e;结构体的定义与基础结构 &#x1f351;结构体的使用 &#x1f4a6;结构体的初始化 &#x1f4a6;结构体的成员访问 &#x1f4a6;结构体数组 &#x1f4a6;结构体指针--------------指向结构体变…

PNAS:人类头皮记录电位的时间尺度

导读 人类的许多行为都是由在不同时间尺度上发生的共同过程所支配的。标准的事件相关电位分析假设有关实验事件的响应持续时间是固定的。然而&#xff0c;最近对动物的单个单元记录显示&#xff0c;在需要灵活计时的行为中&#xff0c;神经活动尺度跨越了不同的持续时间。本研…

vue3——使用axios

1、Axios 是什么? 浏览器页面在向服务器请求数据时&#xff0c;因为返回的是整个页面的数据&#xff0c;页面都会强制刷新一下&#xff0c;这对于用户来讲并不是很友好。并且我们只是需要修改页面的部分数据&#xff0c;但是从服务器端发送的却是整个页面的数据&#xff0c;十…

Keras深度学习实战(33)——基于LSTM的序列预测模型

Keras深度学习实战&#xff08;33&#xff09;——基于LSTM的序列预测模型0. 前言1. 序列学习任务1.1 命名实体提取1.2 文本摘要1.3 机器翻译2. 从输出网络返回输出序列2.1 传统模型体系结构2.2 返回每个时间戳的网络中间状态序列2.3 使用双向 LSTM 网络小结系列链接0. 前言 在…

Qt易忘样式表总结

目录前言1、Qt设置样式的几种方式2、几种复合控件的样式设置QTableWidgetQCalendarWidgetQTreeWidgetQSpinBoxQComboBox前言 在使用Qt框架开发软件时&#xff0c;为了美观和更好的用户体验&#xff0c;需要为各种控件设置样式。一些通用且简单的样式如背景色、边框、字体字号等…

js实现图片懒加载

js实现图片懒加载 1、介绍getBoundingClientRect()函数 该函数没有参数&#xff0c;用于获取元素位置&#xff0c;返回一个对象&#xff0c;具有六个属性分别是&#xff1a; ele.getBoundingClientRect().top – 返回元素上边到视窗上边的距离 ele.getBoundingClientRect().l…

【经典面试题-LeetCode134:加油站问题(Java实现)】

加油站问题一、题目描述1.题目内容2.样例二、解决方案1.分析2.核心代码一、题目描述 1.题目内容 在一条环路上有 n 个加油站&#xff0c;其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车&#xff0c;从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[i…

自动控制原理 - 2 控制系统的数学模型 节2.4-2.6

------------------------------------------------------------------------------ 2 控制系统的数学模型2.4 控制系统的传递函数2.5 典型环节的传递函数2.6 结构图的绘制 2 控制系统的数学模型 2.4 控制系统的传递函数 为何引入传递函数&#xff1f; 微分方程模型的优缺…

Webpack面试题总结

说说你对webpack的理解&#xff1f;解决了什么问题&#xff1f; webpack最初的目标是实现前端项目模块化&#xff0c;目的在于更高效的管理和维护项目中的每一个资源 模块化&#xff1a; 最早的时候&#xff0c;我们通过文件划分的形式实现模块化&#xff0c;也就是将每个功能…

JVM性能——开启回收日志和实时查看GC信息

JVM性能——开启回收日志和实时查看GC信息 JDK版本&#xff1a;OpenJDK 1.8.0_352-b08 操作系统&#xff1a;CentOS 7 如果文章内出现测试数据测试代码 depth:23 关于JVM的其他文章 JVM性能——垃圾回收器的优化策略 JVM性能——垃圾回收器的介绍 JVM性能——开启回收日…

网络赚钱项目 - 虚拟项目如何选择产品

今日一个老粉找我&#xff0c;他去年3月份就重视我跟我互动了&#xff0c;他上来并不是索取什么&#xff0c;而是给我信息&#xff0c;比如他最近测验了什么产品&#xff0c;什么产品好卖&#xff0c;都会把测验的数据告诉我&#xff0c;当然作为回报&#xff0c;我也会告诉他一…

Centos7宝塔部署python

前言&#xff1a;宝塔本身有python项目管理器&#xff0c;但是有些依赖安装会存在问题&#xff0c;比如paddlehub安装总是失败&#xff0c;本文在宝塔安装了anaconda基础上配合python项目管理器去部署项目&#xff0c;保障依赖隔离不混乱。 centos7宝塔安装conda流程地址&…

Linux使用YUM安装程序

目录 前言 什么是YUM&#xff1f; 1.本地源&#xff1a;系统安装光盘 目的 1&#xff09;观察YUM核心配置目录 2&#xff09;删除官方YUM库 3&#xff09;编写本地YUM库配置文件 4&#xff09;挂载安装光盘 保证把光盘放到服务器上&#xff0c;通电 挂载 5&#xff0…

np中的normalize/histogram/cumsum/interp函数

一、normalize函数 void normalize(InputArray src,OutputArray dst, double alpha=1, double beta=0, int norm_type=NORM_L2, int dtype=-1, InputArray mask=noArray() ) 归一化就是要把需要处理的数据经过处理后 (通过某种算法)限制在你需要的一定范围内。首先归一…