您的位置:首页 > 其它

图像增强

2014-11-25 10:56 627 查看
void edgeEnhance(cv::Mat& srcImg, cv::Mat& dstImg)  

{  
std::vector<cv::Mat> rgb;  

if (srcImg.channels() == 3)        // rgb image  
{  
cv::split(srcImg, rgb);  
}  
else if (srcImg.channels() == 1)   // gray image  
{  
rgb.push_back(srcImg);  
}  
// 分别对R、G、B三个通道进行边缘增强  
for (size_t i = 0; i < rgb.size(); i++)  
{  
cv::Mat sharpMat8U;  
cv::Mat sharpMat,sharpMat2;
cv::Mat blurMat;  

//Mat grad_x, grad_y, gray;
// 高斯平滑  
//cv::GaussianBlur(rgb[i], blurMat, cv::Size(3,3), 0, 0);  
// 计算拉普拉斯  
//cv::Laplacian(blurMat, sharpMat, CV_16S,1);

cv::Sobel(rgb[i],sharpMat,CV_16S,1,0,5);

//cv::Sobel(rgb[i],sharpMat2,CV_16S,0,1,5);
//grad_x = cv::abs(sharpMat);
//cv::Sobel(rgb[i],sharpMat,CV_16S,0,1,5);
//grad_y = cv::abs(sharpMat);
//cv::addWeighted(grad_x,0.5,grad_y,0.5,0,gray);

#if 1
// 转换类型  
sharpMat.convertTo(sharpMat8U, CV_8U);
cv::add(rgb[i], 0.4*sharpMat8U, rgb[i]);  

//sharpMat2.convertTo(sharpMat8U, CV_8U);
//cv::add(rgb[i], sharpMat8U, rgb[i]);  

#else
// 第二种转换类型

convertScaleAbs(sharpMat,sharpMat8U,1);
cv::add(rgb[i], sharpMat8U, rgb[i]);  
convertScaleAbs(sharpMat2,sharpMat8U,1);
cv::add(rgb[i], sharpMat8U, rgb[i]); 

#endif
}  
cv::merge(rgb, dstImg);  

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  图像处理