简单的写一个关于添加椒盐噪声的图像。
代码如下:
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);
说了好多, 感觉都是些很基础的知识。
本文介绍了如何使用OpenCV在C++环境中实现椒盐噪声添加、图像加权融合及感兴趣区域(ROI)操作等基本图像处理技术。
&spm=1001.2101.3001.5002&articleId=9959635&d=1&t=3&u=9b1720a7da75460b938541c1a1a740ed)
1661

被折叠的 条评论
为什么被折叠?



