像素临近区域、颜色通道、ROI区域的访问---opencv.2学习笔记2
来源:互联网 发布:北电网络倒闭了吗 编辑:程序博客网 时间:2024/05/21 11:06
一、对图像某一像素临近区域的访问
#include "stdafx.h"using namespace std;using namespace cv;void sharpen( const Mat &img,Mat &result){for(int j = 1;j < img.rows-1;++j){const uchar *previous = img.ptr<const uchar>(j-1);const uchar *current = img.ptr<const uchar>(j);const uchar *next = img.ptr<const uchar>(j+1);uchar *output = result.ptr<uchar>(j);for(int i =1;i < 3*(img.cols-1);++i){*output++ = cv::saturate_cast<uchar>(5*current[i]-current[i-1]-current[i+1]-previous[i]-next[i]);}}result.row(0).setTo(cv::Scalar(0));result.row(result.rows-1).setTo(cv::Scalar(0));result.col(0).setTo(cv::Scalar(0));result.col(result.cols-1).setTo(cv::Scalar(0));}void main(){Mat image = imread("E:\\4.jpg");namedWindow("img");imshow("img",image);Mat result;result.create(image.size(),image.type());sharpen(image,result);namedWindow("imageClone");imshow("imageClone",result);waitKey(0);}
代码说明:实现了图像的锐化处理,采用的是拉普拉斯算子。定义了三个指针分别指向当前行、前一行和下一行。对边缘像素特殊处理,此处直接设置为0。
函数说明:
saturate_cast<uchar>() //因为对像素点进行拉普拉斯算子计算后,其值可能会小于0或者大于255。该函数将小于0的值设为0大于255的值设为255。若输入参数为浮点型,则去最接近的整型值。
result.row(0) //该函数将会返回一个单行的Mat类型实例,且不会产生新的内存分配,而是在result的基础之上。
setTo() //将指定矩阵的所有值设为一个指定的值。
二、算子用opencv函数实现的方式
void sharpen2D(const cv::Mat &image, cv::Mat &result) { // Construct kernel (all entries initialized to 0) cv::Mat kernel(3,3,CV_32F,cv::Scalar(0)); // assigns kernel values kernel.at<float>(1,1)= 5.0; kernel.at<float>(0,1)= -1.0; kernel.at<float>(2,1)= -1.0; kernel.at<float>(1,0)= -1.0; kernel.at<float>(1,2)= -1.0; //filter the image cv::filter2D(image,result,image.depth(),kernel);}
代码说明: 我们只需定义模板算子矩阵, 将该矩阵传给filter2D()函数即可。
函数说明:
filter2D(image,result,image.depth(),kernel); //
三、过滤提取图像
// create vector of 3 images std::vector<cv::Mat> planes; // split 1 3-channel image into 3 1-channel images cv::split(image1,planes); // add to blue channel planes[0]+= image2; // merge the 3 1-channel images into 1 3-channel image cv::merge(planes,result);
代码说明:将image2加到image1的蓝色通道,
函数说明:
split() //拷贝一幅图像的三个通道到三个Mat对象中。默认顺序为 蓝、绿、红。
merge() //创建一幅三通道的图像。
四、ROI区域的定义
1、利用Rect()结构定义一个矩形区域:imageROI= image(cv::Rect(385,270,logo.cols,logo.rows));
2、利用Range结构:cv::Mat imageROI= image(cv::Range(270,270+logo.rows),
cv::Range(385,385+logo.cols))
3、定义某行或某列为ROI
cv::Mat imageROI= image.rowRange(start,end) ;
cv::Mat imageROI= image.colRange(start,end) ;
//因为ROI区域没有拷贝原图像数据,所以对ROI的操作将会影响原图像。
- 像素临近区域、颜色通道、ROI区域的访问---opencv.2学习笔记2
- openCV学习笔记-ROI区域的操作
- OpenCV中取ROI区域RGB的均值,求方差,ROI区域颜色是否明显区分
- opencv学习笔记ROI区域和图像混合叠加
- Opencv学习笔记2--像素的访问
- OpenCV笔记5:设置图像的感兴趣区域(ROI)
- 【opencv的学习】ROI区域的初步尝试
- 【Opencv学习(三)】获取Mat图像的ROI区域
- opencv提取ROI区域
- Opencv感兴趣区域-ROI
- Opencv ROI区域操作
- OpenCV学习——ROI区域
- OpenCV学习——ROI区域
- opencv学习之感兴趣区域(ROI)
- opencv--学习之感兴趣区域(ROI)
- ROI感兴趣区域opencv初级变换学习
- OpenCV中关于感兴趣的区域ROI
- OpenCV对感兴趣区域(ROI)的操作
- 确保数据存入磁盘
- 对WAP站点的User_Agent最新分析
- Oracle DECODE函数的语法介绍
- Android ApiDemos示例解析(199):总结
- Class
- 像素临近区域、颜色通道、ROI区域的访问---opencv.2学习笔记2
- LibSVM学习
- 【读书笔记】Effective C++ 条款1 至 4
- 通信
- 错误 java.util.NoSuchElementException:Hashtable Enumerator
- Raspberry Pi到手!折腾开始!多图!哈哈哈
- Linux下arm开发板学习环境配置
- ping 监控
- TCP-通信