目录
1、图像显示与读取
2、色彩空间转换
3、图像对象创建和赋值
1、图像显示与读取
- imread() 图像读取
IMREAD_GRAYSCALE 加载灰度图像
IMREAD_UNCHANGED 加载图像通道不变,可以加载透明通道
- imshow() 图像显示
- src.empty() 判读src是否为空
- namedWindow() 创建窗口
- watiKey() 图像显示时间
- 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 #includeusing namespace cv; //创建一个QuickDemo对象 class QuickDemo { public: void colorSpace_Demo(Mat &image); //定义一个类,里面包含输入一个图片,对图片操作 };
2、创建个源文件quickdemo.cpp,引入头文件quickopencv.h
#includevoid 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);
}



