加载美女图片之OpenCV 图像读取与显示

这篇具有很好参考价值的文章主要介绍了加载美女图片之OpenCV 图像读取与显示。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

加载美女图片之OpenCV 图像读取与显示

📖作者介绍:22级树莓人(计算机专业),热爱编程<目前在c++和openCv阶段>——目标Windows,MySQL,Qt,数据结构与算法,openCv,Linux,多线程,会持续分享学习成果和小项目的
📖作者主页:热爱编程的小K
📖专栏链接:OpenCV

🎉欢迎各位→点赞👏 + 收藏💞 + 留言🔔​
💬总结:希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🐾

加载美女图片之OpenCV 图像读取与显示


一、图像通道

  • 颜色通道
  • RGB 图像有4 个默认通道:红色、绿色和蓝色各有一个通道,以及一个用于编辑图像复合通道(主通道)
  • 彩色深度
  • 8位色,每个像素所能显示的彩色数为2的8次方,即256种颜色。

  • 16位增强色,16位彩色,每个像素所能显示的彩色数为2的16次方,即65536种颜色。

  • 24位真彩色,每个像素所能显示的彩色数为24位,即2的24次方,约1680万种颜色。

  • 32位真彩色,即在24位真彩色图像的基础上再增加一个表示图像透明度信息的Alpha通道。

    • Alpha通道:一张图片的透明和半透明度

CV_8UC3系列解读

  • 函数原型

    CV_<bit_depth>(S|U|F)C<number_of_channels>
    
  • bit_depth:像素点占用空间大小bit

  • S|U|F:

    • S:signed int——有符号
    • U:unsigned int——无符号
    • F:float——单精度浮点
  • number_of_channels

    • 1 单通道图像,即为灰度图像
    • 2 双通道图像
    • 3 三通道图像
    • 4 Alpha通道的彩色图像,四通道图像

二、读取图像

1、Mat结构

大家可以用如下图的方式查看,需要用到哪个调用哪个,这里只是简单的介绍

我们可以看一下库函数

加载美女图片之OpenCV 图像读取与显示

class  Mat
{
public/*
 		flag: 
 		1.数字签名 
 		2.维度
 		3.通道数
 		4.连续性
 	*/
	int flags;					
	int dims; 					//数据维数
	int rows,cols; 				//数据行列
	uchar *data;				//存储的数据		
    const uchar* datastart;		//数据开始
    const uchar* dataend;		//数据结束
    const uchar* datalimit;		//数据边界
	//其他成员  
 	//.....
 	//其他方法
 	//.....
 public: 		//构造方式
    // 默认构造函数 Mat A;
    Mat ()
    // 常用构造函数 Mat A(10,10,CV_8UC3);
    Mat (int rows, int cols, int type)
    //Mat A(300, 400, CV_8UC3,Scalar(255,255,255));
    Mat (int ndims, const int *sizes, int type, const Scalar &s)
    Mat (Size size, int type)
    Mat (int rows, int cols, int type, const Scalar &s)
    Mat (Size size, int type, const Scalar &s)
    Mat (int ndims, const int *sizes, int type)
    Mat (const Mat &m)
    Mat (int rows, int cols, int type, void *data, size_t step=AUTO_STEP)
    Mat (Size size, int type, void *data, size_t step=AUTO_STEP)
    Mat (int ndims, const int *sizes, int type, void *data, const size_t *steps=0)
    Mat (const Mat &m, const Range &rowRange, const Range &colRange=Range::all())
    //Mat D (A, Rect(10, 10, 100, 100) );
    Mat (const Mat &m, const Rect &roi)
    Mat (const Mat &m, const Range *ranges)
};
2、格式化打印图像数据

函数原型

Ptr<Formatted> format(InputArray mtx, Formatter::FormatType fmt)

  • 第一个参数是图像名称
  • 第二个参数是打印方式
    • FMT_DEFAULT= 0,
    • FMT_MATLAB= 1,
    • FMT_CSV = 2,
    • FMT_PYTHON = 3,
    • FMT_NUMPY = 4,这也是py的一种打印方式,数组
    • FMT_C = 5,C语言方式打印
3、访问或设置像素强度值

函数原型

Scalar 它将各个通道的值构成一个整体,赋给具有相同通道数的矩阵元素,通俗点就是一个复合数据

scalar(1,2,3);

分别把每一个像素点颜色通道设置为1,2,3,注意这里是BGR

4、imread函数读取图片
Mat imread( const String& filename, int flags = IMREAD_COLOR );
  • filename:文件路径
  • flags:显示方式
flags 解释
IMREAD_REDUCED_COLOR_4 = 33 3通道BGR彩色图像,使图像大小减小1/4
IMREAD_REDUCED_GRAYSCALE_8 =64 单通道灰度图像,并将图像尺寸减小1/8
IMREAD_REDUCED_COLOR_8 = 65 3通道BGR彩色图像,使图像大小减小1/8
IMREAD_IGNORE_ORIENTATION = 128 不要根据EXIF的方向标志旋转图像
IMREAD_UNCHANGED = -1 按原样返回加载的图像(带有alpha通道,否则会被裁剪)
IMREAD_GRAYSCALE = 0 单通道灰度图像
IMREAD_COLOR = 1 3通道BGR彩色图像
IMREAD_ANYDEPTH = 2 16位/32位图像,其他则转换为8位
IMREAD_ANYCOLOR = 4 图像以任何可能的颜色格式读取
IMREAD_LOAD_GDAL = 8 gdal驱动程序加载映像
IMREAD_REDUCED_GRAYSCALE_2 =16 单通道灰度图像,并将图像大小减小1/2
IMREAD_REDUCED_COLOR_2 = 17 3通道BGR彩色图像,使图像大小减小1/2
IMREAD_REDUCED_GRAYSCALE_4 =32 单通道灰度图像,并将图像尺寸减小1/4

三、显示图像

imshow()显示图片

imshow(const string& str,InputArray mat);
  • str:窗口名称
  • mat:图像

销毁窗口

  • destroyAllWindows():销毁所有窗口
  • destroyWindow(const char* windowName):销毁指定窗口

四、保存图像

imwrite()函数保存图片

函数原型

bool imwrite( const String& filename, InputArray img,
              const std::vector<int>& params = std::vector<int>());
  • filename:保存的文件名
  • img:图像
  • params:设置图片质量,压缩率,一般不写

五、综合案例讲解

1、测试上面的函数
void testMat() 
{
	//No.1构造方式
	Mat img(10, 10, CV_8UC1);
	imshow("1", img);

	//No.2 BGR
	Mat img2(300, 300, CV_8UC3, Scalar(0, 255, 0));
	imshow("2", img2);

	//No.3 clone方法拷贝
	Mat img3 = img2.clone();
	imshow("3", img3);
	//No.4
	Mat img4;
	img3.copyTo(img4);
	imshow("4", img4);

	//No.5
	Mat img5 = imread("mm.jpg", IMREAD_GRAYSCALE);
	imshow("5", img5);

	//No.6
	Mat img6 = imread("mm.jpg", IMREAD_REDUCED_COLOR_2);
	imshow("6", img6);
}

这里讲一下拷贝

Mat img3 = img2.clone(); imshow("3", img3);

Mat img4; img3.copyTo(img4); imshow("4", img4);

  • clone()和copyTo():第一个是拷贝调用者,第二个是拷贝到

下面展示一下效果

加载美女图片之OpenCV 图像读取与显示

2、格式化打印效果
void print() 
{
	Mat img(10, 10, CV_8UC1);
	cout << "C:" << endl;
	cout << format(img, Formatter::FMT_C) << endl;
	cout << "csv:" << endl;
	cout << format(img, Formatter::FMT_CSV) << endl;
	cout << "py:" << endl;
	cout << format(img, Formatter::FMT_PYTHON) << endl;
}

效果展示

加载美女图片之OpenCV 图像读取与显示

3、保存图片效果展示
void testSaveimg(const char* filename) 
{
	Mat img = imread("mm.jpg", IMREAD_REDUCED_COLOR_2);
	imwrite(filename, img);
}

这时候我们打开项目文件夹,就会发现,多了一个图片

加载美女图片之OpenCV 图像读取与显示文章来源地址https://www.toymoban.com/news/detail-414117.html

4、综合代码
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
void testMat() 
{
	//No.1构造方式
	Mat img(10, 10, CV_8UC1);
	imshow("1", img);

	//No.2 BGR
	Mat img2(300, 300, CV_8UC3, Scalar(0, 255, 0));
	imshow("2", img2);

	//No.3 clone方法拷贝
	Mat img3 = img2.clone();
	imshow("3", img3);
	//No.4
	Mat img4;
	img3.copyTo(img4);
	imshow("4", img4);

	//No.5
	Mat img5 = imread("mm.jpg", IMREAD_GRAYSCALE);
	imshow("5", img5);

	//No.6
	Mat img6 = imread("mm.jpg", IMREAD_REDUCED_COLOR_2);
	imshow("6", img6);
}
void print() 
{
	Mat img(10, 10, CV_8UC1);
	cout << "C:" << endl;
	cout << format(img, Formatter::FMT_C) << endl;
	cout << "csv:" << endl;
	cout << format(img, Formatter::FMT_CSV) << endl;
	cout << "py:" << endl;
	cout << format(img, Formatter::FMT_PYTHON) << endl;
}
void testSaveimg(const char* filename) 
{
	Mat img = imread("mm.jpg", IMREAD_REDUCED_COLOR_2);
	imwrite(filename, img);
}
int main()
{
	//testMat();
	//print();
	testSaveimg("love.jpg");
	waitKey(0);
	destroyAllWindows();
	return 0;
}

到了这里,关于加载美女图片之OpenCV 图像读取与显示的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • QImage加载opencv读取的图片出错

    今天写opencv的时候, 突然发现一件很奇怪的事情, 用摄像头读取的图片, 用QImage加载的时候传入img.data, 一切都很正常, 但是如果我是从保存的图片读取灰度图, 传入img.data, 它会告诉我QImage不能传入memoryview, 但是我打了断点, 也打印过, 它们确实都是memoryview, 而且

    2024年04月13日
    浏览(41)
  • openCV图像读取和显示

    运行 imread是OpenCV图像处理库中的一个函数,用于从文件中读取图像数据并将其存储为一个Mat对象 其中,参数filename指定了要读取的图像文件的路径和文件名;参数flags指定了读取图像时的标志,它是一个可选参数,默认值为IMREAD_COLOR,表示读取彩色图像。 imread函数支持读取多

    2024年02月14日
    浏览(40)
  • 【OpenCV】P2 程序加载显示图片

    在 Opencv 中,如果想要加载展示一张图片,有以下几个步骤: 读取图像 :根据指定路径读取图像,将图像转化为数字矩阵形式; 创建窗口 :创建图像显示窗口,命名窗口名称; 显示图像 :通过窗口以数字矩阵形式展示图像; 释放内存 :展示完成,释放内存。 OpenCV 提供函

    2024年01月25日
    浏览(34)
  • OpenCV 01(图像加载与显示)

    现在说的机器视觉(Machine Vision)一般指计算机视觉(Computer Vision), 简单来说就是研究如何使机器看懂东西。就是是指用摄影机和电脑代替人眼对目标进行识别、跟踪和测量等机器视觉,并进一步做图形处理,使电脑处理成为更适合人眼观察或传送给仪器检测的图像。 人脸识别

    2024年02月09日
    浏览(31)
  • OpenCV 入门教程:图像读取和显示

    2023年07月08日
    浏览(59)
  • 如何使用OpenCV进行图像读取和显示?

    使用OpenCV进行图像读取和显示是计算机视觉领域中的常见任务之一。下面是关于如何使用OpenCV进行图像读取和显示的简要步骤和示例代码。    首先,你需要安装OpenCV库并确保正确导入它。然后,按照以下步骤执行图像读取和显示操作: 导入OpenCV库: 读取图像文件: 在这个

    2024年02月06日
    浏览(47)
  • OpenCV读取一张深度图像并显示

    2024年02月12日
    浏览(43)
  • 【Qt 多线程+opencv 读取和显示图像】

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 提示:这里可以添加本文要记录的大概内容: 提示:以下是本篇文章正文内容,下面案例可供参考 加入了信号与槽机制来处理多线程中的图像数据: 创建工作线程类 :首先创建一个工作线程类,它从

    2024年02月19日
    浏览(41)
  • QT+opencv【opencv学习篇】OpenCV 读取、显示和保存图像

    目录   一、OpenCV 读取图像 OpenCV 读取函数 参数: 二、OpenCV 显示图像 imshow函数 imshow函数功能 imshow函数原型 三、OpenCV 保存图像 四、结果和代码   OpenCV 允许我们对图像执行多种操作,但要做到这一点,需要读取一个图像文件作为输入,然后我们可以对其执行各种操作。Ope

    2024年02月16日
    浏览(48)
  • 【C++的OpenCV】第三课-OpenCV图像加载和显示

    本章节中,将会学习到: 加载图像(cv::imread()函数) 创建一个图像显示的窗口(cv::namedWindow()函数) 在窗口中显示图片(cv::imshow()函数) 功能介绍:         从指定路径中读取所选择的图像 参数解释: Mat image:     image 是一个Mat的对象。     Mat 是一种OpenCV中的图像存储

    2024年02月05日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包