OpenCV常用Mat、Point、Rectangle等数据结构总结

本文主要总结Opencv的常用数据结构

总结的初衷是:我发现OpenCV居然没有对Mat元素求和的操作。!!因此好好总结

1、Mat

CV_8UC1  // 8位无符号单通道    uchar
CV_8UC3  // 8位无符号3通道     uchar

CV_32FC1  // 32位浮点型单通道  float
CV_32FC3  // 32位浮点型3通道   float

CV_64FC1  // 64位单通道 double 

1.2 成员函数

Mat::t()     // Matrix transpose
Mat::inv()   // inverse 逆矩阵

1.3 实用函数

int r = countNonZero(Matirx); // 计算非0 元素个数
meanStdDev(Matrix, mean, stddev);  // 计算均值方差
void minMaxLoc(InputArray src, CV_OUT double* minVal,  
                           CV_OUT double* maxVal=0, CV_OUT Point* minLoc=0,  
                           CV_OUT Point* maxLoc=0, InputArray mask=noArray());
                           // 定位最大值与最小值
                           norm // 求范数

2、GpuMat

  • basic function
void GpuMat::GpuMat(const cv::Mat& host_data);
void GpuMat::upload(const cv::Mat& host_data);
void GpuMat::download(cv::Mat& host_data);
  • example
//Examples
cv::gpu::setDevice(0);  // 设置deviceID
Mat host_image = cv::imload(“file.png”); //load image from file
GpuMat device_image1;
device_image1.upload(host_image1); //allocate memory and upload to GPU
GpuMat device_image2;
device_image1.copyTo(device_image2); //allocate memory and GPU-GPU copy
device_image2.donwload(host_image); //download data

3、python VS c++

对于OpenCV,python中处理图片是作为numpy来处理的,而c++是自己的cv::Mat
这里有两个地方不一致,在做ROI区域的截取的时候,OpenCV的python接口是用的切片方式。而Mat是按行访问。

#python:
raw_image = cv2.imread(path_image)
raw_image[y1:y2, x1:x2] #y是height方向,x是col方向索引
#cpp:
raw_image(cv::Rect(x,y,w,h))

Ref:

http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/core/mat%20-%20the%20basic%20image%20container/mat%20-%20the%20basic%20image%20container.html

你可能感兴趣的:(OpenCV)