OpenCV练习第一弹

来源:互联网 发布:打电话l录音软件 编辑:程序博客网 时间:2024/05/20 09:09

专注于计算机视觉,用心灵的窗口照亮世界。

本次练习的目的是找出交界处轮廓的左右两点,并连成直线。涉及到以下三个知识点:

1.opencv像素操作的常用方法

2.opencv图像的深浅拷贝

3.opencv point的用法


这里写图片描述


一、opencv像素操作的常用方法

1.at()函数

uchar value = grayim.at<uchar>(i, j);   //读出第i行第j列像素值grayim.at<uchar>(i, j) = 128;          //将第i行第j列像素值设置为128

2.使用迭代器

MatIterator_<uchar> grayit, grayend;for(grayit = grayim.begin<uchar>(), grayend = grayim.end<uchar>(); grayit != grayend; ++grayit)          *grayit = rand()%255;

3.通过数据指针

for(int i = 0; i < grayim.rows; ++i){    uchar *p = grayim.ptr<uchar>(i);    for(int j = 0; j < grayim.cols; ++j)        p[j] = (i + j) % 255;}

二、opencv图像的深浅拷贝

先聊聊cv::Mat。cv::Mat是用于保存图像以及其他矩阵数据结构的数据结构,当cv::Mat实例化后,分配内存;当对象离开作用域后,分配的内存自动释放。cv::Mat实现了引用计数以及浅拷贝。引用计数的作用是只有当所有内存数据的对象都被析构后,内存才会释放。

1.浅拷贝

当图像间之间进行赋值时,图像数据并未发生复制,而是两个对象都指向同一块内存块。



2.深拷贝

指新创建的图像拥有原始图像的崭新拷贝,即拷贝图像和原始图像在内存中存放在不同的地方。OpenCV中可以通过下面两种方式实现深拷贝。copyTo和clone的区别。

  • img.copyTo(img1)
  • img1= img.clone()



三、opencv point的用法

Point类是一个包含两个整型数据成员x和y以及一些简单成员方法的类类型,和它有关的好几个Point点类的变种如下所示:

//【1】Point2f----二维单精度浮点型点类  //【2】Point2d----二维双精度浮点型点类  //【3】Point3i----三维整形点类  

参考文献:

1.【于仕琪 OpenCV入门教程】

2.【OpenCV中图像的浅拷贝与深拷贝】

3.【OpenCV中的基本数据类型——Point,Size,Rect,Scalar,Vec3b】


9/7/2017 10:39:56 AM

作者:大表哥

版权归作者所有,转载请注明出处

源码请访问:https://github.com/joeaaron/LearningOpenCV/tree/PT-DEV

原创粉丝点击