发布时间:2023-05-22 19:00
1. Mask operation
官网
Mask操作的效果决定于其使用的Mask, 通過Mask在圖像上逐個像素的便利,得到當前像素的新的值.
比如增强对比度(銳化)的:
实现方法:
void Sharpen(const cv::Mat& myImage, cv::Mat& Result)
{
CV_Assert(myImage.depth() == CV_8U);
const int nChannels = myImage.channels();
//注意create方法的使用,This is one of the key Mat methods. Most new-style OpenCV functions and methods that produce arrays call this method for each output array.
Result.create(myImage.size(), myImage.type());
for(int j=1; j(j-1);
const uchar* current = myImage.ptr(j);
const uchar* next = myImage.ptr(j+1);
uchar* output = Result.ptr(j);
for(int i=nChannels; i(5*current[i] - \\
current[i-nChannels] - current[i+nChannels] - previous[i] - next[i]);
}
}
//注意對邊界上的像素的處理,當然不一定要設置爲0
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));
}
系統提供的對應的函數:
cv::Mat kernel = (cv::Mat_(3, 3) << 0, -1, 0, \\
-1, 5, -1, \\
0, -1, 0);
cv::filter2D(src, dst1, src.depth(), kernel);
2. Adding (blending) two images using OpenCV
linear blend operator
src1 and src2, they both have to be of the same size (width and height) and type.
beta = ( 1.0 - alpha );
addWeighted( src1, alpha, src2, beta, 0.0, dst);
此函数实现了:
3. Changing the contrast and brightness of an image
图像处理:
a. A general image processing operator is a function that takes one or more input images and produces an output image.
b. Image transforms can be seen as:
1) Point operators (pixel transforms) 对点的操作(像素的变换)
2) Neighborhood (area-based) operators 对邻域的操作
Brightness and contrast adjustments:
point processes, multiplication and addition with a constant::
写成像素的形式:
实现:
cv::Mat new_image = cv::Mat::zeros( image.size(), image.type());
double alpha = 1.0; /*Simple contrast control*/
double beta = 0; /*Simple brightness control*/
for(int y=0; y(y,x)[c] = cv::saturate_cast \\
(alpha*image.at(y,x)[c] + beta);
}
}
}