我在深度学习工作当中,对于常用的opencv的c++代码进行的整理总结。后续会进一步的修改和添加内容。部分内容来源于网络,已经说明具体出处。
来源于百度百科。
OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。 [1] 它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
OpenCV用C++语言编写,它具有C ++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac OS,OpenCV主要倾向于实时视觉应用,并在可用时利用MMX和SSE指令, 如今也提供对于C#、Ch、Ruby,GO的支持。
// 初始化设值
cv::Mat M(2, 2, CV_8UC3, Scalar(b, g, r));
// 非初始化设值
cv::Mat M;
M.create(h, w, CV_8UC1);
M.create(cv::Size(w, h), CV_8UC1);
// 使用无参构造方法创建
cv::Mat M = cv::Mat();
M.create(h, w, CV_8UC1);
// 使用带参构造方法创建
Mat m = Mat(h, w, CV_8UC3, Scalar(b, g, r);
Mat m = Mat(Size(h, w), CV_8UC3);
Mat m = Mat(Size(h, w), CV_8UC3, Scalar(b, g, r));
// 小矩阵直接赋值
cv::Mat M = (cv::Mat_<int>(w,h)<<1,2,3,4);
// 从其它Mat创建
cv::Mat M(img.size(), CV_8UC1, img.data);
// 从tensor创建
cv::Mat img(img_tensor.size(1), img_tensor.size(2), CV_8UC1, img_tensor.data_ptr());
cv::Mat img(cv::Size(img_tensor.size(2), img_tensor.size(1)), CV_8UC1, img_tensor.data_ptr());
// 从图像创建
cv::Mat img = cv::imread(imgpath);
// 使用类Matlab方法
cv::Mat M = cv::Mat::eye(4, 4, CV_64F);
cv::Mat M = cv::Mat::zeros(3, 3, CV_64F);
cv::Mat M = cv::Mat::ones(2, 2, CV_64F);
cv::Mat src = cv::imread(imgpath);
// 浅拷贝
// method 1
cv::Mat dst;
dst = src;
// method 2
cv::Mat dst(src);
// 深拷贝
// method 1
cv::Mat dst = src.clone();
// method22
cv::Mat dst;
src.copyTo(dst);
代码如下(示例):
cv::Mat img = (cv::Mat_<int>(3, 2) << 1, 2, 3, 4, 5, 6);
int i, j;
// 访问像素值
for (i = 0;i<img.rows;i++)
{
for (j=0;j<img.cols;j++)
{
cout << img.at<int>(i,j)<<" ";
}
cout << endl;
}
// 用指针扫描图像
cv::Mat img1 = (cv::Mat_<int>(3, 2) << 1, 2, 3, 4, 5, 6);
int nl = img1.rows;
int nc = img1.cols*img1.channels();
if (img1.isContinuous())
{
nc = nc*nl;
nl = 1;
}
for (i=0;i<nl;i++)
{
int* data = img1.ptr<int>(i);
for (j=0;j<nc;j++)
{
cout << data[j] << " ";
}
cout << endl;
}
// 用迭代器扫描图像
cv::Mat img2 = (cv::Mat_<int>(3, 2) << 1, 2, 3, 4, 5, 6);
// cv::MatIterator_ it;
cv::Mat_<int>::iterator it = img2.begin<int>();
cv::Mat_<int>::iterator itend = img2.end<int>();
for (;it!=itend;it++)
{
cout << (*it) << " ";
}
cout << endl;
https://www.cnblogs.com/long5683/p/9693014.html ↩︎
https://blog.csdn.net/daaizjh/article/details/81053165 ↩︎