C++实战Opencv第二天——色彩空间转换函数和opencv中图像对象创建与赋值(从零开始,保姆教学)

OpenCV是一个强大的计算机视觉库,使用C++作为主要编程语言,对于图像处理和计算机视觉领域具有重要意义。其提供了丰富的功能和算法,使得开发者能够快速实现各种图像处理和计算机视觉应用。OpenCV C++为图像处理和计算机视觉领域的开发者提供了一个高效、稳定的工具。通过OpenCV的函数库和模块,可以方便地进行图像读取、保存、调整大小、滤波、边缘检测等常见的图像处理操作。而且,OpenCV还支持各种图像格式,包括JPEG、PNG、BMP等,使得开发者能够处理不同类型的图像数据。OpenCV C++提供了丰富的计算机视觉算法,如特征提取、目标检测、人脸识别、光流估计等。这些算法可以帮助开发者解决实际问题,比如在智能交通系统中进行车辆检测与跟踪,或者在安防系统中进行行人识别与监控。同时,OpenCV还提供了机器学习和深度学习的支持,使得开发者能够应用各种机器学习算法和深度神经网络模型进行图像分类、目标识别和场景理解等。OpenCV C++具有跨平台的特性,可以在不同操作系统(如Windows、Linux、macOS)上进行开发和部署。这为开发者提供了更大的灵活性,使得他们能够针对不同的应用场景选择合适的平台。OpenCV C++具有较高的性能和可扩展性。它使用了优化的C++代码和多线程技术,能够在处理大规模图像数据时保持高效率。同时,OpenCV C++还支持GPU加速,通过利用图形处理器的并行计算能力,加速图像处理和计算机视觉算法的执行速度。

综上所述,OpenCV C++为开发者提供了丰富的功能和算法,使得他们能够快速构建各种图像处理和计算机视觉应用。无论是在科学研究、工业应用还是个人项目中,OpenCV C++都发挥着不可替代的作用,推动着图像处理和计算机视觉的发展。

一、色彩空间转换函数与图像保存

1.色彩空间转换函数- cvtColor

COLOR_BGR2GRAY = 6 彩色到灰度

COLOR_GRAY2BGR = 8 灰度到彩色

COLOR_BGR2HSV = 40 BGR到HSV

COLOR_HSV2BGR = 54 HSV到BGR

2.图像保存- imwrite

第一个参数是图像保存路径

第二个参数似乎图像内存对象

配置属性表:

属性管理器->新建项目属性表

 

建立opencv属性表。建立后,双击打开,然后配置包含目录 ,配置库目录,配置链接器,配置过程如第一天。

C++实战Opencv第一天——win11下配置vs,opencv环境和运行第一个c++代码(从零开始,保姆教学)_win11 opencv测试-CSDN博客

以后新建项目,就可以直接添加opencv属性表,不用再配置了。 

完整代码:

main.cpp:

#include<opencv2/opencv.hpp>
#include<quickopencv.h>
#include<iostream>using namespace cv;
using namespace std;int main(int argc, char** argv) {Mat src = imread("D:/workspaces/图片/bus.jpg");if (src.empty()) {printf("could not load image....\n");return -1;}namedWindow("输入窗口", WINDOW_FREERATIO);imshow("输入窗口", src);Quickdemo qd;qd.colorSpace_Demo(src);waitKey(0);destroyAllWindows();return 0;
}

quickdemo.cpp:

#include<quickopencv.h>void Quickdemo::colorSpace_Demo(Mat& image) {Mat gray, hsv;cvtColor(image, hsv, COLOR_BGR2HSV);cvtColor(image, gray, COLOR_BGR2GRAY);imshow("HSV", hsv);imshow("灰度", gray);imwrite("D:/workspaces/图片/hsv.jpg",hsv);imwrite("D:/workspaces/图片/gray.jpg",gray);}

quickopecv.h:

#pragma once
#include<opencv2/opencv.hpp>using namespace cv;class Quickdemo {public:void colorSpace_Demo(Mat& image);
};

 

 二、opencv中图像对象创建与赋值

1.c++中mat对象与创建

2.python中numpy数据对象

Mat赋值时, 只是修改指针,还是这个数据,只有克隆时,才会产生新的数据。

 main.py:

#include<opencv2/opencv.hpp>
#include<quickopencv.h>
#include<iostream>using namespace cv;
using namespace std;int main(int argc, char** argv) {Mat src = imread("D:/workspaces/图片/bus.jpg");if (src.empty()) {printf("could not load image....\n");return -1;}namedWindow("输入窗口", WINDOW_FREERATIO);imshow("输入窗口", src);Quickdemo qd;//qd.colorSpace_Demo(src);qd.mat_creation_demo(src);waitKey(0);destroyAllWindows();return 0;
}

 quickdemo.cpp:

#include<quickopencv.h>void Quickdemo::colorSpace_Demo(Mat& image) {Mat gray, hsv;cvtColor(image, hsv, COLOR_BGR2HSV);cvtColor(image, gray, COLOR_BGR2GRAY);imshow("HSV", hsv);imshow("灰度", gray);imwrite("D:/workspaces/图片/hsv.jpg",hsv);imwrite("D:/workspaces/图片/gray.jpg",gray);}void Quickdemo::mat_creation_demo(Mat& image)
{Mat m1, m2;m1 = image.clone();image.copyTo(m2);//创建空白图像 8UC1:8位,UC无符号的,1单通道的Mat m3 = Mat::zeros(Size(8, 8), CV_8UC1);std::cout << m3 << std::endl;
}

quickopencv.h:

#pragma once
#include<opencv2/opencv.hpp>using namespace cv;class Quickdemo {public:void colorSpace_Demo(Mat& image);void mat_creation_demo(Mat& image);
};

 

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

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

相关文章

【实战】阿里智能编码助手通义灵码

文章目录 前言技术积累通义灵码是什么&#xff1f;Copilot是什么&#xff1f;通义灵码主要功能通义灵码有哪些优势&#xff1f;通义灵码支持语言/工具通义灵码接入方式通义灵码帮助中心 实战演示安装插件行/函数级实时续写自然语言生成代码代码优化单元测试生成代码注释生成解释…

【RPA】什么是RPA

一、什么是RPA? RPA&#xff0c;全称机器人流程自动化&#xff0c;是一种利用机器人技术实现工作信息与业务交互自动化的过程。它能够按照预先设计的流程&#xff0c;高效地处理大量的工作信息与业务交互&#xff0c;极大地节约了人工成本。如今&#xff0c;RPA已成为智能化软…

贪心算法篇

“靠漫步&#xff0c;将生趣填饱~” 贪心算法简介&#xff1f; 贪心算法&#xff08;Greedy Algorithm&#xff09;&#xff0c;也称为贪婪算法&#xff0c;是一种在解决问题时采取贪心策略的方法。其基本原理是很简单的&#xff1a; “在每个决策点上都选择当下看似最好的选项…

《动手学深度学习(PyTorch版)》笔记7.1

注&#xff1a;书中对代码的讲解并不详细&#xff0c;本文对很多细节做了详细注释。另外&#xff0c;书上的源代码是在Jupyter Notebook上运行的&#xff0c;较为分散&#xff0c;本文将代码集中起来&#xff0c;并加以完善&#xff0c;全部用vscode在python 3.9.18下测试通过&…

shell脚本捕捉被中断信号

1、使用trap命令对信号进行捕捉 #!/bin/bash# 设置捕捉信号的处理函数 trap echo "Received SIGTERM"; exit SIGTERM trap echo "Received SIGINT"; exit SIGINTwhile true; doecho "Running in the background..."sleep 1 done 2、如何定位是…

FANUC机器人PROF-017从机断开故障报警处理方法总结

FANUC机器人PROF-017从机断开故障报警处理方法总结 情况说明&#xff1a; 机器人安装的是PROFINET板卡&#xff0c;按照手册进行PROFINET配置之后&#xff0c;重启控制柜&#xff0c;此时系统提示&#xff1a;PROF-017 从机断开&#xff0c; 如下图所示&#xff0c; 打电话咨…

PDF下载添加水印和访问密码

下载接口 ApiOperation(value "下载文件-pdf", notes "下载文件pdf版", httpMethod "GET", response WebResult.class)RequestMapping(value "/downloadPdf", method RequestMethod.GET)public void downloadFilePdf(RequestPar…

HTML5和CSS3强化知识总结

HTML5的新特性 HTML5的新增特性主要是针对于以前的不足&#xff0c;增一些新的标签、新的表单和新的表单属性等。这些新特性都有兼容性问题&#xff0c;基本是IE9以上版本的浏览器才支持&#xff0c;如果不考虑兼容性问题&#xff0c;可以大量使用这些新特性。 HTML5新增的语义…

ubuntu 18.04修改网卡名称

1.原来网卡配置 现在要把enp3s0的名称改为eth0 2. 总共修改三个文件 第一个修改 sudo vi /etc/default/grub 添加最后一行 GRUB_CMDLINE_LINUX"net.ifnames0 biosdevname0" 第二个修改sudo vi /etc/udev/rules.d/70-persistent-net.rules 如果没有就新建文件&a…

uniapp android和微信小程序实现PDF在线预览

在使用uniapp开发移动端时&#xff0c;微信开发者工具里webview能正常打开后端接口返回的pdf文件流。正式发布后&#xff0c;在配置了业务域名和服务器域名的前提下&#xff0c;预览pdf文件却只能看到白屏&#xff0c;因此我猜测微信小程序不能通过webview读取文件流。这个想法…

python接口自动化(五)--接口测试用例和接口测试报告模板(详解)

简介 当今社会在测试领域&#xff0c;接口测试已经越来越多的被提及&#xff0c;被重视&#xff0c;而且现在好多招聘信息要对接口测试提出要求。区别于传统意义上的系统级别测试&#xff0c;很多测试人员在接触到接口测试的时候&#xff0c;也许对测试执行还可以比较顺利的上手…

flink实战--flink的job_listener使用解析

背景 生产环境可能有如下的需求:当一个flink作业提交完成或者是运行中不定时给我们触发某个接口或发送一个消息,然后我们在做其他的操作,尤其是batch作业。 flink的job_listener就可以满足我们监听flink任务提交和运行状态的需求,具体如何使用本文将全面介绍一下。 注册入…

C2-Search-Netlas:一款基于Netlas API的强大C2服务器识别与检测工具

关于C2-Search-Netlas C2-Search-Netlas是一款功能强大的命令与控制&#xff08;C2&#xff09;服务器检测工具&#xff0c;该工具使用Java语言开发&#xff0c;基于Netlas API实现其功能&#xff0c;可以帮助广大研究人员轻松快速地识别和检测目标C2服务器的相关信息。 C2-S…

C++:通过count和find判断vector中是否包含某个数据

vector本身没有提供可以检测某个数据是否在其中的成员方法&#xff0c;可以使用泛型方法count和find进行检查&#xff1a; #include <iostream> #include <vector> #include <algorithm> using namespace std;int main() {vector<int> d{1, 2, 2, 2, …

nginx flv模块的使用和源码分析

这里写自定义目录标题 1. 为什么需要ngx_http_flv_module2. 配置指令3. 加载ngx_http_flv_module 模块4. 源码分析4.1 指令分析4.2 ngx_http_flv_handler处理函数 5. 如何请求flv进行验证6. 思考 1. 为什么需要ngx_http_flv_module 毋庸多说&#xff0c;就是为了提供在线的http…

Redis之基础篇

Redis简介 Redis是一种基于键值对&#xff08;Key-Value&#xff09;的NoSQL数据库&#xff0c;它支持string&#xff08;字符串&#xff09;、hash&#xff08;哈希&#xff09;、list&#xff08;列表&#xff09;、set&#xff08;集合&#xff09;、zset&#xff08;有序集…

Java后端面试总结

Java语言具有哪些特点? Java为纯面向对象的语言。它能够直接反应现实生活中的对象。 具有平台无关性。java利用Java虚拟机运行字节码,无论是在Windows、Linux还是MacOS等其它平台对Java程序进行编译,编译后的程序可在其它平台运行。 Java为解释型语言,编译器把Java代码编译…

随机图论基础

一&#xff0c;随机图、随机图空间 1&#xff0c;随机图 一个n个点的无向图&#xff0c;最多有sn(n-1)/2条边。 每条边都有一定的概率存在&#xff0c;有一定概率不存在&#xff0c;那么每个图都有一个出现概率。 2&#xff0c;随机图空间 一共有2^s种不同的图&#xff0c…

[word] word怎么让字在横线上居中 #学习方法#媒体#媒体

word怎么让字在横线上居中 word怎么让字在横线上居中&#xff1f; 在word文档中&#xff0c;有时为了某些字句突出显示&#xff0c;需要用下划线来表示&#xff0c;当着重显示部分为金额、面积或某些选项时&#xff0c;需要一条长下划线上左右有空白&#xff0c;而文字在下划…

Linux下对线程的理解(上)

1、线程的概念 要理解线程首先要理解页表和进程地址空间&#xff0c;我是这样子理解的&#xff0c;1、进程地址空间是进程访问资源的窗口。2、页表是规定进程地址空间中哪些属于进程。3、合理的使用进程地址空间页表可以对资源进行划分。而如何理解进程呢&#xff1f;进程是接受…