OpenCV2计算机视觉编程手册(2)


简单的写一个关于添加椒盐噪声的图像。

代码如下:

void salt(cv::Mat &image, int n) {

    int i,j;
    for (int k=0; k<n; k++) {

        // rand() is the MFC random number generator
       i= qrand()%image.cols;
      j= qrand()%image.rows;


        if (image.channels() == 1) { // gray-level image

            image.at<uchar>(j,i)= 255;

        } else if (image.channels() == 3) { // color image

            image.at<cv::Vec3b>(j,i)[0]= 255;
            image.at<cv::Vec3b>(j,i)[1]= 255;
            image.at<cv::Vec3b>(j,i)[2]= 255;
        }
    }
}

int main()
{

    Mat image= imread("puppy.bmp",0);
       // avoid mem error
       if (image.empty()){
           namedWindow("can not find image : img.jpg");
           waitKey(5000);
           return -1;
   }
       //creat image windows named "My Image"
       namedWindow("My Image",1);
       //show the image on window
       salt(image,3000);
       imshow("My Image",image);
       //wait key for 5000ms
       waitKey(0);

       return 0;

}


 

这边需要注意的是,在MFC中随机函数用rand,但是在Qt中我们使用qrand,另外我们还有添加头文件QTime.

效果如下:

OpenCV2计算机视觉编程手册(2)_第1张图片   OpenCV2计算机视觉编程手册(2)_第2张图片

 

接下来简答的图像加权:

 cv::Mat image1;
        cv::Mat image2;

        image1= cv::imread("boldt.jpg");
        image2= cv::imread("rain.jpg");
        if (!image1.data)
            return 0;
        if (!image2.data)
            return 0;

        cv::namedWindow("Image 1");
        cv::imshow("Image 1",image1);
        cv::namedWindow("Image 2");
        cv::imshow("Image 2",image2);

        cv::Mat result;
        cv::addWeighted(image1,0.7,image2,0.9,0.,result);

        cv::namedWindow("result");
        cv::imshow("result",result);

       waitKey(0);

       return 0;


 

效果:

OpenCV2计算机视觉编程手册(2)_第3张图片 OpenCV2计算机视觉编程手册(2)_第4张图片 OpenCV2计算机视觉编程手册(2)_第5张图片

                   

 

另外关于加权还收好多方法:

result= 0.7*image1+0.9*image2;

之后关于ROI感兴趣区域的定义很简单,先定义图像区域:

imageROI= image(cv::Rect(385,270,logo.cols,logo.rows));


然后插入:

cv::addWeighted(imageROI,1.0,logo,0.3,0.,imageROI);

或者:

   cv::Mat mask= cv::imread("logo.bmp",0);  
    // copy to ROI with mask  
   logo.copyTo(imageROI,mask); 


再者用Range函数:

imageRoi=image(Range(270,270+logo.rows),Range(385,385+logo.cols))


如果想建立原始图像的ROI

Mat imageROI=image.rowRange(start,end);  
Mat imageROI=image.colRange(start,end);

 说了好多, 感觉都是些很基础的知识。

 

 

 

 

 

 

 

 

你可能感兴趣的:(OpenCV2计算机视觉编程手册(2))