目录
1、图像显示与读取
2、色彩空间转换
3、图像对象创建和赋值
1、图像显示与读取
- imread() 图像读取
IMREAD_GRAYSCALE 加载灰度图像
IMREAD_UNCHANGED 加载图像通道不变,可以加载透明通道
- imshow() 图像显示
- src.empty() 判读src是否为空
- namedWindow() 创建窗口
- watiKey() 图像显示时间
- destroyAllWindows() 销毁所有窗口
#include2、色彩空间转换#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; }
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); }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)