博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
提取图像里面的红色灯笼(一)
阅读量:4970 次
发布时间:2019-06-12

本文共 4045 字,大约阅读时间需要 13 分钟。

 

 

 

图像的分割:RGB空间图像的分割:

/**************************************************************函数功能:对图像rgb空间红色灯笼的提取输入参数:源图像src;目标图像des;图像参数width,height,nChannels;输出参数:目标图像**************************************************************/void rgb_seg(unsigned char* des, const unsigned char* src, int width, int height, int nChannels){                printf("%d,%d,%d,",nChannels,width,height);         unsigned char* ocl = new unsigned char[width * height * nChannels];         for(int y = 0; y < height; y++)             {                       for(int x = 0; x < width; x++)                       {                                       int img_B= src[y * width * nChannels + x * nChannels ] ;                                         int img_G= src[y * width * nChannels + x * nChannels + 1] ;                                            int img_R= src[y * width * nChannels + x * nChannels + 2] ;                                 if((img_R>140)&&(img_G<70)&&(img_B<70))                 //简单的阈值提取                                         for(int n=0;n

  

下图第一幅为简单的红色分量阈值分割,第二幅为对前一副图像7*7的模板的膨胀。

下图第一幅为用13*13的模板进行腐蚀,第二幅用13*13的模板再次进行膨胀:

可见再次膨胀后的图像消除了所有的噪点,我们对这幅图像进行还原,还原的基本原理就是对图像有红色区域的部分用源图像进行相对应位置的填充。如下所示,对比原图可见其较好的找出了灯笼的轮廓。

 

图像的分割:HSI空间图像的分割:

/**************************************************************函数功能:对图像hsi空间红色灯笼的提取输入参数:源图像src;目标图像des;图像参数width,height,nChannels;输出参数:目标图像**************************************************************/void hsi_seg(unsigned char* des, const unsigned char* src, int width, int height, int nChannels){                printf("%d,%d,%d,",nChannels,width,height);         unsigned char* ocl = new unsigned char[width * height * nChannels];         unsigned char* hsi = new unsigned char[width * height * nChannels];         rgb_hsi(hsi,src, width,  height,  nChannels);    //hsi分量提取         for(int y = 0; y < height; y++)             {                       for(int x = 0; x < width; x++)                       {                                       int img_H= hsi[y * width * nChannels + x * nChannels ] ;                                        int img_S= hsi[y * width * nChannels + x * nChannels + 1] ;                                             int img_I= hsi[y * width * nChannels + x * nChannels + 2] ;                                 if(((img_H<104)&&(img_H>102))&&(img_I>40)&&(img_S>160))                                     {                                               //printf("%d, ",img_S);                                         for(int n=0;n

  

下图第一幅图像为HIS空间对图像进行的简单的阈值分割,分割条件:

((img_H<104)&&(img_H>102))&&(img_I>40)&&(img_S>160)

可见其噪点很少,对其进行2*2的模板腐蚀再进行18*18的模板膨胀,如下右图所示:

可见右图已经比较好的找出了灯笼的位置,我们用进行10*10的模板还原得到下面的图,和原图比较,也得到了比较好的效果。

下面是图像腐蚀、膨胀、还原的代码:

/**************************************************************函数功能:对图像进行M*M模板的腐蚀输入参数:源图像src;目标图像des;图像参数width,height,nChannels;腐蚀边长M输出参数:目标图像**************************************************************/void ImageErosion(unsigned char* des, const unsigned char* src, int width, int height, int nChannels,int M){         memcpy(des, src, nChannels*width*height);         int m,p,k=0,q=0;         for(int y = 20; y < height-20; y++)             {                       for(int x = 20; x < width-20; x++)                {                    if((src[y * width * nChannels + x * nChannels + 2]!=255))                    {                                                        k=k+1;                                                        for(m=-M;m<=M;m++)                        {                        for(p=-M;p<=M;p++)                            {                                                                  if((src[(y+m) * width * nChannels + (x+p) * nChannels + 2])==255)                                                                 {                                                                   for(int n=0;n
130) { for(int n=0;n

  

转载于:https://www.cnblogs.com/hustlx/p/5245556.html

你可能感兴趣的文章
springboot+mybatis报错Invalid bound statement (not found)
查看>>
Linux环境下SolrCloud集群环境搭建关键步骤
查看>>
P3565 [POI2014]HOT-Hotels
查看>>
MongoDB的简单使用
查看>>
prometheus配置
查看>>
【noip2004】虫食算——剪枝DFS
查看>>
python 多进程和多线程的区别
查看>>
sigar
查看>>
iOS7自定义statusbar和navigationbar的若干问题
查看>>
[Locked] Wiggle Sort
查看>>
deque
查看>>
c#中从string数组转换到int数组
查看>>
数据模型(LP32 ILP32 LP64 LLP64 ILP64 )
查看>>
java小技巧
查看>>
POJ 3204 Ikki's Story I - Road Reconstruction
查看>>
iOS 加载图片选择imageNamed 方法还是 imageWithContentsOfFile?
查看>>
toad for oracle中文显示乱码
查看>>
SQL中Group By的使用
查看>>
两个表格中数据不用是一一对应关系--来筛选不同数据,或者相同数据
查看>>
hiho_offer收割18_题解报告_差第四题
查看>>