图像增强
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);
}
{
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);
}
相关文章推荐
- Visual C++实现数字图像增强处理、平滑、锐化
- 【转】retinex图像增强算法
- 频率域图像增强
- Retinex图像增强算法代码
- Android 系列 6.9使用图像按钮增强UI设计
- 图像增强之高斯模糊
- 图像增强去雾之直方图均衡化/同态滤波/Retinex算法
- 2017.06.29总结指纹识别图像增强问题
- 数字图像处理之空间域图像增强
- MUSICA(多尺度图像对比度增强)算法的简要原理及VC实现
- 拉普拉斯滤波实现图像增强
- 图像增强-中值滤波
- 【算法学习】【图像增强】CHAHE(限制对比度自适应直方图均衡)
- 图像增强中的灰度拓展
- 图像基础---RGB分量增强效果
- 图像增强-2
- 灰度图像--图像增强 锐化基础
- 图像增强之空间域的增强
- 一种极快速去模糊效应图像细节增强及其应用
- OpenCV图像增强算法实现(直方图均衡化、拉普拉斯、Log、Gamma)