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:

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:

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:

cpp 复制代码
#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:

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);
	qd.mat_creation_demo(src);

	waitKey(0);
	destroyAllWindows();
	return 0;
}

quickdemo.cpp:

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:

cpp 复制代码
#pragma once
#include<opencv2/opencv.hpp>

using namespace cv;

class Quickdemo {
    public:
	    void colorSpace_Demo(Mat& image);
		void mat_creation_demo(Mat& image);
};
相关推荐
不是万能的豆学长1 小时前
filetidy 文件整理助手:一键归类 + 规范重命名(Python 零依赖单文件工具)
大数据·开发语言·python·技术美术
懂点Tech5 小时前
ctfshow MISC入门图片篇(信息附加):misc41解题思路
开发语言·python
catchadmin6 小时前
PHP 8.7 协程新提案 让跨协程代码共享请求身份
开发语言·php
念何架构之路7 小时前
go-grpc设计思想
开发语言·后端·golang
酷炫码神7 小时前
Day 10|Pinia 状态管理:把散落在各组件的数据,收进一个全局仓库
android·开发语言·javascript
Elastic 中国社区官方博客8 小时前
我们如何通过 70 多个拉取请求,将 OpenTelemetry Java agent 迁移到 invokedynamic
java·大数据·开发语言·elasticsearch·搜索引擎·全文检索·es
tyn1888 小时前
记录本地安装nacos服务的方法及异常
java·开发语言
步行cgn9 小时前
Spring MVC 视图机制的核心接口与类
java·开发语言·后端·spring·mvc
传奇开心果编程10 小时前
【Rust入门练中学】第5课:引用与借用
开发语言·rust·引用·编程语言理论·通用编程语言·借用
qetfw10 小时前
Bash 变量:export、位置参数与默认值展开验证
linux·开发语言·chrome·bash