首页 > 编程语言 >opencv入门-小白的学习笔记c++(1)

opencv入门-小白的学习笔记c++(1)

时间:2024-06-21 20:59:47浏览次数:26  
标签:src 入门 int image c++ opencv 图像 cv Mat

注:以下是根据链接https://blog.csdn.net/Cream_Cicilian/article/details/105427752 的小白学习过程。

1加载、修改、保存图像

1.1加载图像

1.1.1加载图像cv::imread

用于从文件中读取图像数据并将其存储到一个 cv::Mat 对象中,其中第一个参数表示图像文件名称
第二个参数,表示加载的图像是什么类型

以下是三个参数值展示效果
(1)当使用 IMREAD_UNCHANGED 时
IMREAD_UNCHANGED (<0) 表示加载原图,不做任何改变

#include <opencv2/opencv.hpp>
#include<iostream>

using namespace std;
using namespace cv;

int main() {
	cv::Mat image = cv::imread("D:\\vscodestore\\zxc.jpg", cv::IMREAD_UNCHANGED);
	//Mat src = imread("D:\\vscodestore\\zxc.jpg");
	if (image.empty()) {
		printf("could not find the image!\n");
		return -1;
	}
	imshow("ImputImage", image);
	waitKey(0);
	system("path");
	getchar();
	return 0;
}

在这里插入图片描述
(2)当使用IMREAD_GRAYSCALE 时
IMREAD_GRAYSCALE ( 0)表示把原图作为灰度图像加载进来

#include <opencv2/opencv.hpp>
#include<iostream>

using namespace std;
using namespace cv;

int main() {
	cv::Mat grayImage = cv::imread("D:\\vscodestore\\cartoon.jpg", cv::IMREAD_GRAYSCALE);
	if (grayImage.empty()) {
		printf("could not find the image!\n");
		return -1;
	}
	imshow("ImputImage", grayImage);
	waitKey(0);
	system("path");
	getchar();
	return 0;
}

用人像实验灰度图像有点怪,这里用卡通人物纪念童年
在这里插入图片描述
(3)当使用IMREAD_COLOR时
IMREAD_COLOR (>0) 表示把原图作为RGB图像加载进来

#include <opencv2/opencv.hpp>
#include<iostream>

using namespace std;
using namespace cv;

int main() {
	cv::Mat rbgImage = cv::imread("D:\\vscodestore\\zxc.jpg", cv::IMREAD_COLOR);
	if (rbgImage.empty()) {
		printf("could not find the image!\n");
		return -1;
	}
	imshow("ImputImage", rbgImage);
	waitKey(0);
	system("path");
	getchar();
	return 0;
}

在这里插入图片描述
使用 IMREAD_COLOR 和 IMREAD_UNCHANGED 的主要区别在于理论上的处理意图——前者明确要求以彩色无透明度信息的方式读取,后者理论上想要保持所有可能的原始信息,但在 JPG 的实际应用场景中这一点并不适用,因为 JPG 不携带 alpha 通道信息。因此,在 JPG 图像的上下文中,这两个模式的实际效果是等价的。

1.1.2显示图像(cv::namedWindos 与cv::imshow)

namedWindow 是 OpenCV 库中的一个函数,用于创建一个窗口并为其指定一个名称。使用 namedWindow 创建窗口后,可以在这个窗口中显示图像,进行交互,比如调整窗口大小、移动窗口位置等。
imshow根据窗口名称显示图像到指定的窗口上去,第一个参数是窗口名称,第二参数是Mat对象

以下是参数值展示效果:

  • WINDOW_AUTOSIZE会自动根据图像大小,显示窗口大小,不能人为改变窗口大小
  • WINDOW_NORMAL,跟QT集成的时候会使用,允许修改窗口大小。
#include <opencv2/opencv.hpp>
#include<iostream>

using namespace std;
using namespace cv;

int main() {
	cv::Mat rbgImage = cv::imread("D:\\vscodestore\\zxc.jpg", cv::IMREAD_COLOR);
	if (rbgImage.empty()) {
		printf("could not find the image!\n");
		return -1;
	}
	namedWindow("exampleWindow", WINDOW_NORMAL);
	imshow("exampleWindow", rbgImage);
	waitKey(0);
	destroyAllWindows();
	return 0;
}

在这里插入图片描述
你会发现图片小了好多,本来还在想怎么输入代码调整窗口大小,后来搜索发现就是在显示的图片窗口简单粗暴的拉动窗口

标签:src,入门,int,image,c++,opencv,图像,cv,Mat
From: https://blog.csdn.net/qq_45707900/article/details/139776412

相关文章

  • 0基础学C++ | 第03天 | 基础知识 |算术运算符 | 赋值运算符 | 比较运算符 | 逻辑运算
    前言前面已经讲了,数据类型以及求数据类型所占的空间0基础学C++|第02天|基础知识|sizeof关键字|浮点型|字符型|转义字符|字符串|布尔类型|数据的输入-CSDN博客,现在讲运算符算术运算符 作用:用于处理四则运算#include<iostream>usingnamespacestd;in......
  • 【每日一练】python入门级小案例
    题目数字从小到大排序 用户随意分别输入三个数,利用列表的排序方法sort()从小到大排序。代码: 输出结果: 代码分析:先创建三个变量x,y,z,用input()输入获取值;再创建一个列表,元素分别是x,y,z三个变量;利用列表的排序方法sort(),对列表从小到大排序;用for循环遍......
  • docker入门
    前言Docker诞生于2013年,由SolomonHykes在DotCloud公司(后更名为Docker,Inc.)创立。Docker的核心理念是**“Build,Ship,andRunAnywhere”**,即构建、发布、运行应用程序不受环境限制。Docker通过容器化技术,将应用及其所有依赖打包到一个独立的、可移植的单元中,从而实现了......
  • String(C++)
    文章目录前言文档介绍经典题目讲解HJ1字符串最后一个单词的长度模拟实现框架构造函数析构函数迭代器c_str()赋值size()capacity()reserveempty()[]访问front/backpush_backappendoperator+=insert一个字符insert一个字符串eraseswapfind一个字符find一个字符串substr(......
  • Flask新手入门(一)
    前言Flask是一个用Python编写的轻量级Web应用框架。它最初由ArminRonacher作为Werkzeug的一个子项目在2010年开发出来。Werkzeug是一个综合工具包,提供了各种用于Web应用开发的工具和函数。自发布以来,Flask因其简洁和灵活性而迅速受到开发者的欢迎。随着Python社区的增长,Fl......
  • Windows C++ 应用软件开发从入门到精通详解
    目录1、引言2、IDE开发环境介绍2.1、VisualStudio 2.2、QTCreator3、Windows平台实用小工具介绍3.1、代码编辑器VSCode3.2、代码查看编辑器SourceInsight3.3、文本编辑器Notepad++3.4、文件搜索工具Everything4、C++语言特性4.1、熟悉泛型编程4.2、了解......
  • 【C++】priority_queue的模拟实现与仿函数
    文章目录1.优先级队列的介绍与使用1.1介绍1.2使用2.模拟实现2.1push2.2pop2.3top、empty、size2.4迭代区间构造3.仿函数1.优先级队列的介绍与使用1.1介绍优先级队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。......
  • 校招常见七大排序C++版(适合新人,通俗易懂)
    作者:求一个demo版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处内容通俗易懂,没有废话,文章最后是面试常问内容是否稳定最优、最坏、平均时间复杂度最优、最坏、平均空间复杂度冒泡排序是O(n)、O(n^2)、O(n^2)0、O(n)、O(1)选择排序否O(n^2)、O(n^2)......
  • C++矩阵库:Eigen 3.4.90 中文使用文档 (一)
    写在前面:我在学习Eigen库时,没找到好的中文文档,因此萌发了汉化Eigen官网文档的想法。其中一些翻译可能不是特别准确,欢迎批评指正。感兴趣的同学可以跳转到官网查看原文:Eigen:MainPagehttps://eigen.tuxfamily.org/dox/index.html       Eigen库,是一个开源的C......
  • C/C++ 缓冲区溢出问题总结
    缓冲区溢出(BufferOverflow)是一种常见的安全漏洞,它发生在当程序试图将更多的数据放入一个固定大小的内存区域(即缓冲区)时,超过了该区域所能容纳的数据量。这可能导致未定义的行为,包括数据损坏、程序崩溃,甚至更糟糕的是,攻击者可以利用这种漏洞执行恶意代码。一、缓冲区溢出概述缓冲......