openCV4.5.1学习笔记——02 基础 *** 作

openCV4.5.1学习笔记——02 基础 *** 作,第1张

openCV4.5.1学习笔记——02 基础 *** 作

目录

1、图像显示与读取

2、色彩空间转换

3、图像对象创建和赋值


1、图像显示与读取
  1. imread()                图像读取 

                IMREAD_GRAYSCALE                 加载灰度图像

                IMREAD_UNCHANGED                加载图像通道不变,可以加载透明通道

  1. imshow()               图像显示
  2. src.empty()           判读src是否为空
  3. namedWindow()   创建窗口
  4. watiKey()                图像显示时间
  5. destroyAllWindows()        销毁所有窗口
#include 
#include 

using namespace cv;		// opencv命名空间
using namespace std;

int main(int argc,char** argv) {
	
	Mat src = imread("D:/Learn/programming/openCV/lib/images/lena.jpg");
	// IMREAD_GRAYSCALE 加载灰度图像
	//Mat src = imread("D:/Learn/programming/openCV/lib/images/lena.jpg", IMREAD_GRAYSCALE);
	// IMREAD_UNCHANGED 加载图像通道不变,可以加载透明通道
	//Mat src = imread("D:/Learn/programming/openCV/lib/images/lena.jpg", IMREAD_UNCHANGED);

	
	if (src.empty()) {
		printf("could not load image...n");
		return -1;
	}

	
	namedWindow("输入窗口", WINDOW_FREERATIO);


	
	imshow("输入窗口", src);

	
	waitKey(0);

	
	destroyAllWindows();

	return 0;


}
2、色彩空间转换

cvtColor()                      色彩空间转换函数

                COLOR_BGR2GRAY              彩色到灰度

                COLOR_GRAY2BGR               灰度到彩色

                COLOR_GRAY2HSV              彩色到HSV

                COLOR_HSV2GRAY              HSV到彩色

imwirte()                        图像保存,第一个参数是图像保存路径,第二个参数是图像内存对象

1、首先创建一个头文件quickopencv.h


#pragma once

#include 

using namespace cv;

//创建一个QuickDemo对象
class QuickDemo {
	public:
		void colorSpace_Demo(Mat &image);	//定义一个类,里面包含输入一个图片,对图片 *** 作
};

2、创建个源文件quickdemo.cpp,引入头文件quickopencv.h

#include 

void QuickDemo::colorSpace_Demo(Mat &image) {

	Mat im_gray, im_hsv;		// 定义1个gray,1个hsv

	
	cvtColor(image, im_hsv, COLOR_BGR2HSV);
	cvtColor(image, im_gray, COLOR_BGR2GRAY);

	imshow("HSV", im_hsv);
	imshow("灰度", im_gray);

	
	imwrite("D:/Learn/programming/openCV/lib/images/lena1_hsv.jpg", im_hsv);
	imwrite("D:/Learn/programming/openCV/lib/images/lena1_gray.jpg", im_gray);
}

3、在main.cpp内,引入头文件quickopencv.h,使用刚写的函数colorSpace_Demo()

#include 
#include 
#include 

using namespace cv;		// opencv命名空间
using namespace std;

int main(int argc,char** argv) {
	// 读取图像
	Mat src = imread("D:/Learn/programming/openCV/lib/images/lena.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;


}

 注意:如果出现引用头文件报错,右键项目,属性,选择x64上一级文件夹,确定

3、图像对象创建和赋值

clone()                克隆

copyTo()                复制

Scalar()                各通道赋值

channels()             通道数

void QuickDemo::mat_creation_Demo(Mat &image) {
	Mat m1, m2;

	// 克隆和复制
	m1 = image.clone();		// 克隆
	image.copyTo(m2);		// 复制

	// 创建空白图像
	
	Mat m3 = Mat::zeros(Size(8, 8), CV_8UC3);		
	std::cout << "width:" << m3.cols << "nheight:" << m3.rows << "nchannels:" << m3.channels() << std::endl;
	std::cout << m3 << std::endl;

	Mat m4 = Mat::ones(Size(512, 512), CV_8UC3);
	// 注意,当用ones创建3通道图像,只有第一个(B通道)是1,其它通道仍是0
	// 直接赋值也只给第一个通道赋值
	m4 = 127;
	// 3个通道赋值,使用Scalar()函数
	m4 = Scalar(127, 0, 127);
	std::cout << "width:" << m4.cols << "nheight:" << m4.rows << "nchannels:" << m4.channels() << std::endl;
	//std::cout << m4 << std::endl;
	imshow("m4", m4);

	// 图像直接赋值,为浅复制,更m5,m4跟着改变
	//Mat m5 = m4;					
	//m5 = Scalar(0, 127, 0);
	//imshow("m4_c", m4);	
	//imshow("m5", m5);

	// clone()克隆为深复制
	//Mat m5 = m4.clone();

	//m5 = Scalar(0, 127, 0);
	//imshow("m4_c", m4);
	//imshow("m5", m5);

	// copyTo为深复制
	Mat m6;
	m4.copyTo(m6);

	m6 = Scalar(0, 127, 0);
	imshow("m4_c", m4);
	imshow("m6", m6);

	
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5665860.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存