#quickopencv.h
#pragma once
#include <opencv2/opencv.hpp>
using namespace cv;
class QuickDemo
{
public:
void colorSpace_Demo(Mat& image);
};
Mat对象:OpenCV2.0之后引进的图像数据结构、自动分配内存、不存在内存泄漏的问题,是面向对象的数据结构。分了两个部分,头部与数据部分。
#quickdemo.cpp
#include "quickopencv.h"
void QuickDemo::colorSpace_Demo(Mat& image)
{
Mat gray, hsv;
cvtColor(image,hsv,COLOR_BGR2HSV); //image->BGR TO HSV->hsv
//H 0~180,S,V
cvtColor(image, gray, COLOR_BGR2GRAY);
namedWindow("HSV", WINDOW_FREERATIO); //自由比例,创建一个“输入窗口”
imshow("HSV", hsv);
namedWindow("gray", WINDOW_FREERATIO); //自由比例,创建一个“输入窗口”
imshow("gray", gray);
imwrite("hsv.png", hsv);
imwrite("gray.png", gray);
}
cvtColor(Mat src, Mat dst, int code)
函数是一个颜色空间转换函数,可以实现RGB颜色向HSV,HSI等颜色空间转换。也可以转换为灰度图。
src | 表示来源的矩阵 |
---|---|
dst | 表示目的地的矩阵 |
code | 表示转换类型的整数代码 |
namedWindow(winname, flags=None)
winname:窗口名字;
flags:窗口标志。标志参数有以下几种:
标志参数 | 作用 |
---|---|
WINDOW_NORMAL | 显示图像后,允许用户随意调整窗口大小 |
WINDOW_AUTOSIZE | 根据图像大小显示窗口,不允许用户调整大小 |
WINDOW_FREERATIO | 窗口大小自适应比例 |
WINDOW_KEEPRATIO | 保持图像的比例 |
CV_EXPORTS_W bool imwrite( const String& filename, InputArray img,const std::vector````& params = std::vector````());
const String& filename | 表示需要写入的文件名,必须要加上后缀,比如“123.png” |
---|---|
nputArray img | 表示Mat类型的图像数据 |
const std::vector& params | 表示为特定格式保存的参数编码,它有一个默认值std::vector< int >(),所以一般情况下不用写 |
#opencv01.cpp
#include<opencv2/opencv.hpp>
#include<iostream>
#include "quickopencv.h"
using namespace std;
using namespace cv;
int main()
{
Mat src = imread("2.jpg");
if (src.empty())
{
cout << "can't open" << endl;
return -1;
}
namedWindow("输入窗口", WINDOW_FREERATIO); //自由比例,创建一个“输入窗口”
imshow("输入窗口", src); //窗口名称,显示对象,必须是8位
QuickDemo qd;
qd.colorSpace_Demo(src);
waitKey(0); //程序停止,图片一直显示
destroyAllWindows(); //销毁窗口
return 0;
}
Mat imread( const String& filename, int flags );
第一个参数 filename: 表示图像的路径。
第二个参数 flags:表示读取图像的方式。
IMREAD_UNCHANGED = -1,表示读取原图, 不进行任何改变
IMREAD_GRAYSCALE = 0,表示以灰度图方式读取原图
IMREAD_COLOR = 1,表示以RGB方式读取原图
waitKey(x);
当x>0,waitkey返回在x时间内按下的按键的ASCwaitkeyZII值,否则返回-1;
当x=0,waitkey表示永久等待,直到有键按下。