Yan
Yan Just a simple man.

c++上使用opencv

c++上使用opencv

opencv支持的图片格式

1
2
3
4
5
6
7
8
Windows bitmaps - *.bmp, *.dib (always supported)
JPEG files - *.jpeg, *.jpg, *.jpe (see the Notes section)
JPEG 2000 files - *.jp2 (see the Notes section)
Portable Network Graphics - *.png (see the Notes section)
WebP - *.webp (see the Notes section)
Portable image format - *.pbm, *.pgm, *.ppm (always supported)
Sun rasters - *.sr, *.ras (always supported)
TIFF files - *.tiff, *.tif (see the Notes section)

格式转换

cv::Mat –> IplImage*

1
2
IplImage* pImg
*pImg = IplImage(MatImg);

IplImage* –> cv::Mat

1
cv::Mat MatImg = cvarrToMat(pImg);
1
2
3
4
5
6
7
8
9
10
# 读取图片

## `cv::Mat` imread()

* 函数原型,

```c++
#include<opencv2/opencv.hpp>
Mat cv::imread(const string& filename,int flags=MREAD_COLOR);
  • 参数

const string& filename: 图片路径

flags: 读入方式

1
2
3
4
5
6
7
8
9
10
11
12
13
IMREAD_UNCHANGED            = -1, //返回包含alpha通道的加载图像
IMREAD_GRAYSCALE            = 0,  //返回一个灰度图像
IMREAD_COLOR                = 1,  //返回一个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。
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的定位标志。

IplImage* cvLoadImage()

  • 原型
1
2
#include <opencv2/imgcodecs/imgcodecs_c.h>
IplImage* cvLoadImage( const char* filename, int flags=CV_LOAD_IMAGE_COLOR )
  • 参数

const char* filename: 图片路径

flags: 读入方式

1
2
3
4
5
6
CV_LOAD_IMAGE_UNCHANGED
CV_LOAD_IMAGE_GRAYSCALE
CV_LOAD_IMAGE_COLOR
CV_LOAD_IMAGE_ANYDEPTH
CV_LOAD_IMAGE_ANYCOLOR
CV_LOAD_IMAGE_IGNORE_ORIENTATION
  • cvDecodeImageM()

使用cvDecodeImageM()函数返回cv::Mat格式

显示图片

namedWindow()

  • 函数原型
1
2
#include <opencv2/highgui/highgui.hpp>
void cv::namedWindow(const String & winname,int flags = WINDOW_AUTOSIZE)	
  • 参数

const String & winname: 窗口的标识名称

flag: 窗口的生成方式

1
2
3
4
5
6
7
8
9
10
11
12
13
CV_WND_PROP_FULLSCREEN 	
CV_WND_PROP_AUTOSIZE 	
CV_WND_PROP_ASPECTRATIO 	
CV_WND_PROP_OPENGL 	
CV_WND_PROP_VISIBLE 	
CV_WINDOW_NORMAL 	
CV_WINDOW_AUTOSIZE 	
CV_WINDOW_OPENGL 	
CV_GUI_EXPANDED 	
CV_GUI_NORMAL 	
CV_WINDOW_FULLSCREEN 	
CV_WINDOW_FREERATIO 	
CV_WINDOW_KEEPRATIO 

imshow()

  • 函数原型
1
2
#include <opencv2/highgui/highgui.hpp>
void imshow(const string& winname,InputArray mat);
  • 参数

const string& winname: 窗口的标识名称

InputArray mat: 显示的图片的矩阵数据

创建图片cvCreateImage

  • 函数原型
1
IplImage* cvCreateImage(CvSize cvSize(int width, int height), int depth, int channels);
  • 参数

depth: 图像元素深度值

1
2
3
4
5
6
7
IPL_DEPTH_8U - 无符号8位整型
IPL_DEPTH_8S - 有符号8位整型
IPL_DEPTH_16U - 无符号16位整型
IPL_DEPTH_16S - 有符号16位整型
IPL_DEPTH_32S - 有符号32位整型
IPL_DEPTH_32F - 单精度浮点数
IPL_DEPTH_64F - 双精度浮点数

channels: 通道值,可以是1,2,3,4

示例源码

官方文档

https://docs.opencv.org/

issues

如果有疑惑或错误,请提issues –> Issues