简单的写一个关于添加椒盐噪声的图像。
代码如下:
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.
效果如下:
接下来简答的图像加权:
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;
效果:
另外关于加权还收好多方法:
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);
说了好多, 感觉都是些很基础的知识。