Opencv 图像增强算法 图像检测结果

2024-06-15 13:08

本文主要是介绍Opencv 图像增强算法 图像检测结果,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本code通过直方图变换增强了图像对比度,实现了单通道图像增强。将图像灰度阈值拉伸到0-255,图像检测结果见底部

Keywords: 图像增强 增强对比度 直方图变换

[cpp] view plain copy print ?
  1. int ImageStretchByHistogram(IplImage *src1,IplImage *dst1)  
  2. /************************************************* 
  3. Function:      通过直方图变换进行图像增强,将图像灰度的域值拉伸到0-255 
  4. src1:               单通道灰度图像                   
  5. dst1:              同样大小的单通道灰度图像  
  6. *************************************************/  
  7. {  
  8.     assert(src1->width==dst1->width);  
  9.     double p[256],p1[256],num[256];  
  10.       
  11.     memset(p,0,sizeof(p));  
  12.     memset(p1,0,sizeof(p1));  
  13.     memset(num,0,sizeof(num));  
  14.     int height=src1->height;  
  15.     int width=src1->width;  
  16.     long wMulh = height * width;  
  17.       
  18.     //statistics   
  19.     for(int x=0;x<src1->width;x++)  
  20.     {  
  21.         for(int y=0;y<src1-> height;y++){  
  22.             uchar v=((uchar*)(src1->imageData + src1->widthStep*y))[x];  
  23.                 num[v]++;  
  24.         }  
  25.     }  
  26.     //calculate probability   
  27.     for(int i=0;i<256;i++)  
  28.     {  
  29.         p[i]=num[i]/wMulh;  
  30.     }  
  31.   
  32.     //p1[i]=sum(p[j]);  j<=i;   
  33.     for(int i=0;i<256;i++)  
  34.     {  
  35.         for(int k=0;k<=i;k++)  
  36.             p1[i]+=p[k];  
  37.     }  
  38.   
  39.     // histogram transformation   
  40.     for(int x=0;x<src1->width;x++)  
  41.     {  
  42.         for(int y=0;y<src1-> height;y++){  
  43.             uchar v=((uchar*)(src1->imageData + src1->widthStep*y))[x];  
  44.                 ((uchar*)(dst1->imageData + dst1->widthStep*y))[x]= p1[v]*255+0.5;              
  45.         }  
  46.     }  
  47.     return 0;  
  48. }  
  49.   
  50. void CCVMFCView::OnImageAdjustContrast()  
  51. {  
  52.     if(workImg->nChannels>1)  
  53.         OnColorToGray();  
  54.     Invalidate();  
  55.     dst=cvCreateImage(cvGetSize(workImg),workImg->depth,workImg->nChannels);  
  56.     ImageStretchByHistogram(workImg,dst);  
  57.     m_dibFlag=imageReplace(dst,&workImg);  
  58.     Invalidate();  
  59. }  
int ImageStretchByHistogram(IplImage *src1,IplImage *dst1)
/*************************************************
Function:      通过直方图变换进行图像增强,将图像灰度的域值拉伸到0-255
src1:               单通道灰度图像                  
dst1:              同样大小的单通道灰度图像 
*************************************************/
{
assert(src1->width==dst1->width);
double p[256],p1[256],num[256];
memset(p,0,sizeof(p));
memset(p1,0,sizeof(p1));
memset(num,0,sizeof(num));
int height=src1->height;
int width=src1->width;
long wMulh = height * width;
//statistics
for(int x=0;x<src1->width;x++)
{
for(int y=0;y<src1-> height;y++){
uchar v=((uchar*)(src1->imageData + src1->widthStep*y))[x];
num[v]++;
}
}
//calculate probability
for(int i=0;i<256;i++)
{
p[i]=num[i]/wMulh;
}
//p1[i]=sum(p[j]);	j<=i;
for(int i=0;i<256;i++)
{
for(int k=0;k<=i;k++)
p1[i]+=p[k];
}
// histogram transformation
for(int x=0;x<src1->width;x++)
{
for(int y=0;y<src1-> height;y++){
uchar v=((uchar*)(src1->imageData + src1->widthStep*y))[x];
((uchar*)(dst1->imageData + dst1->widthStep*y))[x]= p1[v]*255+0.5;            
}
}
return 0;
}
void CCVMFCView::OnImageAdjustContrast()
{
if(workImg->nChannels>1)
OnColorToGray();
Invalidate();
dst=cvCreateImage(cvGetSize(workImg),workImg->depth,workImg->nChannels);
ImageStretchByHistogram(workImg,dst);
m_dibFlag=imageReplace(dst,&workImg);
Invalidate();
}

Experiment Result:

原图灰度化

                                    原图灰度化

检测结果1

                                     检测结果1

灰度化并增强对比度

                                灰度化并增强对比度

检测结果2

                                   检测结果2

这篇关于Opencv 图像增强算法 图像检测结果的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1063540

相关文章

使用雪花算法产生id导致前端精度缺失问题解决方案

《使用雪花算法产生id导致前端精度缺失问题解决方案》雪花算法由Twitter提出,设计目的是生成唯一的、递增的ID,下面:本文主要介绍使用雪花算法产生id导致前端精度缺失问题的解决方案,文中通过代... 目录一、问题根源二、解决方案1. 全局配置Jackson序列化规则2. 实体类必须使用Long封装类3.

Python+wxPython构建图像编辑器

《Python+wxPython构建图像编辑器》图像编辑应用是学习GUI编程和图像处理的绝佳项目,本教程中,我们将使用wxPython,一个跨平台的PythonGUI工具包,构建一个简单的... 目录引言环境设置创建主窗口加载和显示图像实现绘制工具矩形绘制箭头绘制文字绘制临时绘制处理缩放和旋转缩放旋转保存编

Springboot实现推荐系统的协同过滤算法

《Springboot实现推荐系统的协同过滤算法》协同过滤算法是一种在推荐系统中广泛使用的算法,用于预测用户对物品(如商品、电影、音乐等)的偏好,从而实现个性化推荐,下面给大家介绍Springboot... 目录前言基本原理 算法分类 计算方法应用场景 代码实现 前言协同过滤算法(Collaborativ

python+OpenCV反投影图像的实现示例详解

《python+OpenCV反投影图像的实现示例详解》:本文主要介绍python+OpenCV反投影图像的实现示例详解,本文通过实例代码图文并茂的形式给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一、前言二、什么是反投影图像三、反投影图像的概念四、反向投影的工作原理一、利用反向投影backproj

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

使用Python实现图像LBP特征提取的操作方法

《使用Python实现图像LBP特征提取的操作方法》LBP特征叫做局部二值模式,常用于纹理特征提取,并在纹理分类中具有较强的区分能力,本文给大家介绍了如何使用Python实现图像LBP特征提取的操作方... 目录一、LBP特征介绍二、LBP特征描述三、一些改进版本的LBP1.圆形LBP算子2.旋转不变的LB

在PyCharm中安装PyTorch、torchvision和OpenCV详解

《在PyCharm中安装PyTorch、torchvision和OpenCV详解》:本文主要介绍在PyCharm中安装PyTorch、torchvision和OpenCV方式,具有很好的参考价值,... 目录PyCharm安装PyTorch、torchvision和OpenCV安装python安装PyTor

openCV中KNN算法的实现

《openCV中KNN算法的实现》KNN算法是一种简单且常用的分类算法,本文主要介绍了openCV中KNN算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录KNN算法流程使用OpenCV实现KNNOpenCV 是一个开源的跨平台计算机视觉库,它提供了各

OpenCV图像形态学的实现

《OpenCV图像形态学的实现》本文主要介绍了OpenCV图像形态学的实现,包括腐蚀、膨胀、开运算、闭运算、梯度运算、顶帽运算和黑帽运算,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起... 目录一、图像形态学简介二、腐蚀(Erosion)1. 原理2. OpenCV 实现三、膨胀China编程(

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n