opencv学习笔记(1)----图像读写;添加噪声

来源:互联网 发布:吹笛子软件下载 编辑:程序博客网 时间:2024/06/05 16:17

前言

学习使用opencv2.4.9 + vs2013 的编译环境,环境配置简单,不多赘述
opencv2各模块功能
opencv_core:包含核心功能,尤其是底层数据结构和算法函数
opencv_imgproc : 包含图像处理函数
opencv_highgui : 包含读写图像及视频函数,以及操作图形用户界面函数
opencv_features2d : 包含兴趣点检测子,描述子和兴趣点匹配框架
opencv_calib3d : 包含相机标定,双目几何估算以及立体视觉函数
opencv_video : 包含运动估算,特征跟踪以及前景提取函数
opencv_objdetect : 包括物体检测函数,如面部识别

#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp>using namespace cv;void salt(Mat &image, int n);//添加噪声函数int main() {    // read an image    Mat image = imread("D:\\lena.jpg");    // create image window named "My Image"    namedWindow("My Image");    //增加噪点    //salt(image, 3000);    // show the image on window    imshow("My Image", image);    Mat result;    // 正数表示水平翻转;0表示垂直翻转;负数表示既有水平,也有垂直    flip(image, result, -1);    namedWindow("Output Image");    imshow("Output Image", result);    imwrite("output.bmp", result);    waitKey(0);    return 1;}void salt(Mat &image, int n){    for (int k = 0; k < n; k++)    {        int i = rand() % image.cols;        int j = rand() % image.rows;        if (image.channels() == 1)        {            image.at<uchar>(j, i) = 255;        }        else if (image.channels() == 3)        {            image.at<Vec3b>(j, i)[0] = 255;            image.at<Vec3b>(j, i)[1] = 255;            image.at<Vec3b>(j, i)[2] = 255;        }    }}

需要注意的几个点

cv::Mat类是用于保存图像及其他矩阵数据的数据结构,默认情况下初始尺寸为0; Mat对象离开作用域后会自动释放内存,避免内存泄漏
Mat使用引用计数和浅拷贝,如果希望创建崭新拷贝,可使用copyTo()方法
Mat的成员函数at(int y, int x)用来存取像素,at方法本身不会进行任何数据类型转换,因此一定要确保指定的数据类型和矩阵中的数据类型一致
灰度图返回unsighed char 类型的向量
彩色图返回3个unsighed char组成的向量,定义为cv::Vec3b;(注意不要和Vec3d类型搞混,今天被这个错误卡了好久)

原创粉丝点击