一 . Mat类总结Point类总结

一. Mat类

1. 代码示例

#include <iostream>
#include <opencv2/highgui/highgui.hpp>

using namespace cv;
using namespace std;

int main()
{
  Mat image = imread("/home/chang/projects/opencv_GPU_example/test.jpg");
 
  cout << "image.data = "      << image.data        << endl;  // .data表示指向Ma矩阵的首地址
  cout << "image.dims = "      << image.dims        << endl;  // 矩阵的维度,二位矩阵dims=2,三维矩阵dims=3????????
  cout << "image.size = "      << image.size        << endl;  // 行×列(y*x)
  cout << "image.size() = "    << image.size()      << endl;  // 列×行(x*y)
  cout << "image.rows = "      << image.rows        << endl;  // 行
  cout << "image.cols = "      << image.cols        << endl;  // 列
  cout << "image.channels = "  << image.channels()  << endl;  // 图像的通道数,彩色图像为3通道
  cout << "image.depth() = "   << image.depth()     << endl;  // depth用来度量每个像素中每个通道的精度  //enum{CV_8U=0,CV_8S=1,CV_16U=2,CV_16S=3,CV_32S=4,CV_32F=5,CV_64F=6}
  cout << "image.step = "      << image.step        << endl;  // ???????
  cout << "image.step(1) = "   << image.step1()     << endl;  // ???????
  cout << "image.elemsize = "  << image.elemSize()  << endl;  // 一个像素点的大小, elemSize()=8bit的倍数*通道数
  cout << "image.elemsize1 = " << image.elemSize1() << endl;  // 单个通道的数据大小 =(elemSize / Channel)
  cout << "image.type = "      << image.type()      << endl;  // Mat矩阵的类型,包含有矩阵中元素的类型以及通道数信息
 
  namedWindow("car");
  imshow("car", image);
  waitKey(0);
  return 0;
}

2. 常用矩阵类型总结:C(k)表示有k个通道

基本类型C1(或留空)C2C3C(n)
CV_8U08168(n-1)
CV_8S19178(n-1)+1
CV_16U210188(n-1)+2
CV_16S311198(n-1)+3
CV_32S412208(n-1)+4
CV_32F513218(n-1)+5
CV_64F614228(n-1)+6

 

二. Point类

  typedef Point_<int> Point2i;
  typedef Point2i Point;
  typedef Point_<float> Point2f;
  typedef Point_<double> Point2d;
  typedef Point3_<int> Point3i;
  typedef Point3_<float> Point3f;
  typedef Point3_<double> Point3d;

 

好的,下面是关于 `VideoCapture` 、`cvtColor` 函数和 `goodFeaturesToTrack` 函数的实验总结。 ## 实验目的 1. 掌握 `VideoCapture` 的基本功能和使用方法; 2. 掌握 `cvtColor` 函数的基本功能和使用方法; 3. 掌握 `goodFeaturesToTrack` 函数的基本功能和使用方法。 ## 实验环境 - 操作系统:Windows 10; - 开发工具:Visual Studio 2019; - 编程语言:C++; - 库:OpenCV 4.5.3。 ## 实验内容 ### 1. 读取视频文件并显示 首先,我们使用 `VideoCapture` 读取一段视频文件,并将读取到的帧显示出来。代码如下: ```c++ #include <opencv2/opencv.hpp> using namespace cv; int main() { VideoCapture cap("test.mp4"); // 打开视频文件 if(!cap.isOpened()) { printf("Failed to open video file!\n"); return -1; } namedWindow("Video", WINDOW_NORMAL); while(true) { Mat frame; if(!cap.read(frame)) // 读取一帧数据 break; imshow("Video", frame); // 显示帧 if(waitKey(30) == 27) // 按 ESC 键退出 break; } cap.release(); // 释放资源 destroyAllWindows(); return 0; } ``` 在程序中,我们首先打开视频文件,如果打开失败则退出程序。然后创建一个窗口用于显示视频帧,并且不断读取视频文件中的帧并显示出来,直到视频文件读取完毕或者用户按下 ESC 键退出程序。 ### 2. 颜色空间转换 接下来,我们使用 `cvtColor` 函数将一张彩色图片转换为灰度图片。代码如下: ```c++ #include <opencv2/opencv.hpp> using namespace cv; int main() { Mat image = imread("test.jpg"); if(image.empty()) { printf("Failed to open image file!\n"); return -1; } Mat gray; cvtColor(image, gray, COLOR_BGR2GRAY); // BGR -> 灰度 namedWindow("Image", WINDOW_NORMAL); namedWindow("Gray", WINDOW_NORMAL); imshow("Image", image); imshow("Gray", gray); waitKey(0); destroyAllWindows(); return 0; } ``` 在程序中,我们首先读取一张彩色图片,如果读取失败则退出程序。然后使用 `cvtColor` 函数将彩色图片转换为灰度图片,并将结果显示出来。 ### 3. 关键点检测 最后,我们使用 `goodFeaturesToTrack` 函数检测一张图片中的关键点。代码如下: ```c++ #include <opencv2/opencv.hpp> using namespace cv; int main() { Mat image = imread("test.jpg"); if(image.empty()) { printf("Failed to open image file!\n"); return -1; } Mat gray; cvtColor(image, gray, COLOR_BGR2GRAY); // BGR -> 灰度 vector<Point2f> corners; goodFeaturesToTrack(gray, corners, 200, 0.01, 10); // 检测关键点 for(size_t i = 0; i < corners.size(); i++) { circle(image, corners[i], 5, Scalar(0, 0, 255), 2); // 画圆 } namedWindow("Image", WINDOW_NORMAL); imshow("Image", image); waitKey(0); destroyAllWindows(); return 0; } ``` 在程序中,我们首先读取一张图片,如果读取失败则退出程序。然后将图片转换为灰度图片,并使用 `goodFeaturesToTrack` 函数检测图片中的关键点。最后,我们将关键点用红色圆圈标识出来,并将结果显示出来。 ## 实验总结 本次实验中,我们学习了 `VideoCapture` 、`cvtColor` 函数和 `goodFeaturesToTrack` 函数的基本功能和使用方法,并且通过实验加深了对它们的理解。在实际应用中,我们可以根据需要使用它们来处理视频和图像。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值