文章链接:https://blog.csdn.net/q_z_r_s
机器感知一个专注于SLAM、三维重建、机器视觉等相关技术文章分享的公众号 |
第1章 图像编程入门
1.1 简介
1.2 安装OpenCV库
1.3 装载、显示和存储图像
- - imread——读图像
- - namedWindow——定义窗口
- - imshow——显示图像
- - flip——翻转图像
- - waitKey——等待按键
- - imwrite——存储图像
- - setMouseCallback——响应鼠标在图像上的点击操作
- - circle、ellipse、line、rectangle——在图像上绘画对应形状
- - putText——在图像上写入文本
1.4 深入了解cv::Mat
- - Mat::create——重新分配一个新图像
- - Mat::copyTo——把图像复制给另外一个图像
- - Mat::convertTo——转换图像数据类型
1.5 定义兴趣区域
- - 方法一:
cv::Mat imageROI(image,
cv::Rect(image.cols-logo.cols, //ROI坐标
image.rows-logo.rows,
logo.cols,logo.rows)); //ROI大小
logo.copyTO(imageROI); //插入标志
- - 所谓ROI其实就是Mat类的一种构造函数产生的对原图像内存的新的引用,使用Rect来定义ROI区域时,前两个参数为ROI区域的左上角坐标,后两个参数表示ROI的行列大小。
- - 方法二:
cv::Mat imageROI(image,
cv::Range(image.rows-logo.rows, logo.rows) //ROI行范围
cv::Range(image.rows-logo.rows, logo.rows)); //ROI列范围
logo.copyTO(imageROI); //插入标志
- - 第二种方法是给出行列坐标的起始和终止范围
- - 图像掩码:: OpenCV中有些操作可以定义掩码,掩码必须为8位图像,如果掩码中某个位置的值不为0,则在这个位置上的操作就会起作用;如果掩码中的某些像素位置的值为0,那么对图像中的相应位置的操作将不起作用;OpenCV中大多数基于像素的操作都可以使用掩码。
第2章 操作像素
2.1 简介
2.2 访问像素值
- - Mat::at<typename T>(row,col)\[n]——对8-bit图像而言,单通道图像时,T=uchar,\[n]不需要;当为三通道时,T=cv::Vec3b,\[n]可以是0、1、2。
2.3 用指针扫描图像
- - Mat::ptr<typename T>(row)——T为图像数据类型,此方法是把图像看成三维立体的来访问,row对应的不是单纯的行,更准确的说是三维立体的层。
- - 低层次指针算法访问行:
uchar *data = image.data;
data += image.step; //从一行移到下一行
2.4 用迭代器扫描图像
- - cv::MatIterator_<cv::Vec3b> it
- - cv::Mat_<cv::Vec3b>::iterator it
cv::Mat_<cv::Vec3b>::iterator it_begin =
image.begin<cv::Vec3b>(); //获得起始位置
cv::Mat_<cv::Vec3b>::iterator it_end =
image.end<cv::Vec3b>(); //获得结束位置
2.5 编写高效的图像扫描循环
- - cv