C++开源项目:

Boost.GIL:通用图像库
CImg :用于图像处理的小型开源C++工具包
CxImage :用于加载,保存,显示和转换的图像处理和转换库,可以处理的图片格式包括 BMP, JPEG, GIF, PNG, TIFF, MNG, ICO, PCX, TGA, WMF, WBMP, JBG, J2K。
FreeImage :开源库,支持现在多媒体应用所需的通用图片格式和其他格式。
GDCM:Grassroots DICOM 库
ITK:跨平台的开源图像分析系统
Magick++:ImageMagick程序的C++接口
MagickWnd:ImageMagick程序的C++接口
OpenCV : 开源计算机视觉类库
tesseract-ocr:OCR引擎
VIGRA :用于图像分析通用C++计算机视觉库
VTK :用于3D计算机图形学,图像处理和可视化的开源免费软件系统。

MakegGray 彩色转灰度

函数名称:MakegGray()
函数类型:void
功能:真彩色转化成256色灰度图像。

void MakeColorDib::MakegGray()    //灰度变化
{BYTE *p_data;     //原图数据区指针int wide,height,DibWidth;    //原图长、宽、字节宽p_data=this->GetData ();   //取得原图的数据区指针wide=this->GetWidth ();   //取得原图的数据区宽度height=this->GetHeight ();   //取得原图的数据区高度DibWidth=this->GetDibWidthBytes();   //取得原图的每行字节数for(int j=0;j<height;j++) // 每行for(int i=0;i<DibWidth;i+=3) // 每列{BYTE* pbyBlue = p_data++;   //得到蓝色值BYTE* pbyGreen = p_data++;  //得到绿色值BYTE* pbyRed = p_data++;    //得到红色值BYTE r = *pbyRed;BYTE g = *pbyGreen;BYTE b = *pbyBlue;//取到原r,g,b中的最大值作为像素三分量值的新值int gray=0;if(r>g)gray=r;else gray=g;if(gray<b)gray=b;   *pbyBlue = gray;     //将取到的最大值赋给像素的蓝分量*pbyGreen = gray;    //将取到的最大值赋给像素的绿分量*pbyRed = gray;      //将取到的最大值赋给像素的红分量}
}

LightAlter 亮度调整

函数名称:LightAlter(int m_Light)
函数类型:void
参数:int m_Light,用户给定的阈值
功能:对图像使用阈值法进行亮度调整

void MakeColorDib::LightAlter(int m_Light)    //亮度调整
{BYTE *p_data;     //原图数据区指针int wide,height,DibWidth;    //原图长、宽、字节宽p_data=this->GetData ();   //取得原图的数据区指针wide=this->GetWidth ();  //取得原图的数据区宽度height=this->GetHeight ();    //取得原图的数据区高度DibWidth=this->GetDibWidthBytes();   //取得原图的每行字节数for(int j=0;j<height;j++) // 每行for(int i=0;i<DibWidth;i++) // 每列{   int a=0;a=int(*p_data*m_Light/100);   //调整当前点的亮度*p_data=a;//判断范围,取得合理的值if(a<0) *p_data=0;  if(a>255)*p_data=255;p_data++;   //指向下一指针}
}

LightReverse 亮度取反

函数名称:LightReverse()
函数类型:void
功能:图像的亮度取反。

void MakeColorDib::LightReverse()    //亮度取反
{BYTE *p_data;     //原图数据区指针int wide,height,DibWidth;    //原图长、宽、字节宽p_data=this->GetData ();   //取得原图的数据区指针wide=this->GetWidth ();  //取得原图的数据区宽度height=this->GetHeight ();   //取得原图的数据区高度DibWidth=this->GetDibWidthBytes();   //取得原图的每行字节数for(int j=0;j<height;j++) // 每行for(int i=0;i<DibWidth;i++) // 每列{int a=*p_data;   //取得当前点的值*p_data=255-a;    //取反p_data++;  //指向下一指针  }
}

ContrastAlter 调整对比度(阈值法)

函数名称:ContrastAlter(int m_Increment)
函数类型:void
参数:int m_Increment,用户给定的阈值
功能:对图像使用阈值法调整对比度处理。

void MakeColorDib::ContrastAlter(int m_Increment)   ///对比度处理
{int nHigh = 255 - m_Increment;//对于极端情况加以处理if(nHigh < m_Increment){nHigh = 127;m_Increment = 120;}if(m_Increment < -127)m_Increment = -120;//扩展或压缩区间的长度int nStretch = 255;if(m_Increment >= 0)nStretch = 255 - 2 * m_Increment;elsenStretch = 255 + 2 * m_Increment;BYTE *p_data;     //原图数据区指针int wide,height,DibWidth;    //原图长、宽、字节宽p_data=this->GetData ();   //取得原图的数据区指针wide=this->GetWidth ();  //取得原图的数据区宽度height=this->GetHeight ();   //取得原图的数据区高度DibWidth=this->GetDibWidthBytes();   //取得原图的每行字节数if(m_Increment >= 0)   // m_Increment>=0时{for(int j=0;j<height;j++) // 每行for(int i=0;i<DibWidth-3;i+=3) // 每列{   //取得当前点(蓝色)的值,调整BYTE* pbyBlue = p_data++;    if(*pbyBlue<=m_Increment)*pbyBlue=0;else if(*pbyBlue>nHigh)*pbyBlue=255;else*pbyBlue=(BYTE)((((int)*pbyBlue - m_Increment) * 255) / nStretch );//取得当前点(绿色)的值,调整BYTE* pbyGreen = p_data++;if(*pbyGreen<=m_Increment)*pbyGreen=0;else if(*pbyGreen>nHigh)*pbyGreen=255;else*pbyGreen=(BYTE)((((int)*pbyGreen - m_Increment) * 255) / nStretch );//取得当前点(红色)的值,调整BYTE* pbyRed = p_data++;if(*pbyRed<=m_Increment)*pbyRed=0;else if(*pbyRed>nHigh)*pbyRed=255;else*pbyRed=(BYTE)((((int)*pbyRed - m_Increment) * 255) / nStretch );}}else  // m_Increment < 0 时{for(int j=0;j<height;j++)for(int i=0;i<DibWidth-3;i+=3){ //取得当前点(蓝色)的值,调整BYTE* pbyBlue = p_data++;*pbyBlue = (BYTE)((((int)(*pbyBlue) * nStretch) / 255) - m_Increment);//取得当前点(红色)的值,调整BYTE* pbyGreen = p_data++;*pbyGreen = (BYTE)((((int)(*pbyGreen) * nStretch) / 255) - m_Increment);//取得当前点(红色)的值,调整BYTE* pbyRed = p_data++;*pbyRed = (BYTE)((((int)(*pbyRed) * nStretch) / 255) - m_Increment);    }}
}

Exposal 曝光处理

函数名称:Exposal()
函数类型:void
功能:图像曝光处理。

void MakeColorDib::Exposal() //曝光处理
{BYTE *p_data;     //原图数据区指针int wide,height,DibWidth;    //原图长、宽、字节宽p_data=this->GetData ();   //取得原图的数据区指针wide=this->GetWidth ();  //取得原图的数据区宽度height=this->GetHeight ();   //取得原图的数据区高度DibWidth=this->GetDibWidthBytes();   //取得原图的每行字节数for(int j=0;j<height;j++) // 每行for(int i=0;i<DibWidth;i++) // 每列{BYTE* pbydata = p_data++;  //取得当前点的值BYTE a=*pbydata;   //传给临时变量*pbydata=(a>128)?a:(255-a);   //调整}}

PaintColor 着色处理(阈值法)

函数名称:PaintColor(int m_Red,int m_Green,int m_Blue)
函数类型:void
参数:int m_Red、m_Green、m_Blue,用户给定的红绿蓝值
功能:对图像使用阈值法进行着色处理。

void MakeColorDib::PaintColor(int m_Red,int m_Green,int m_Blue) //着色处理
{BYTE *p_data;     //原图数据区指针int wide,height,DibWidth;    //原图长、宽、字节宽p_data=this->GetData ();   //取得原图的数据区指针wide=this->GetWidth ();  //取得原图的数据区宽度height=this->GetHeight ();   //取得原图的数据区高度DibWidth=this->GetDibWidthBytes();   //取得原图的每行字节数for(int j=0;j<height;j++) // 每行for(int i=0;i<DibWidth;i+=3) // 每列{   BYTE* pbyBlue = p_data++; //取得当前点(蓝色)的值     BYTE* pbyGreen = p_data++;  //取得当前点(绿色)的值BYTE* pbyRed = p_data++;    //取得当前点(红色)的值BYTE r = *pbyRed;BYTE g = *pbyGreen;BYTE b = *pbyBlue;BYTE gray=(BYTE)(((WORD)r * 59 + (WORD)g * 30 + (WORD)b * 11) / 100);*pbyBlue = (BYTE)((m_Blue * gray) / 255);  *pbyGreen = (BYTE)((m_Green * gray) / 255);*pbyRed = (BYTE)((m_Red * gray) / 255);}
}

NeonLight 霓虹处理

函数名称:NeonLight()
函数类型:void
功能:使图像产生霓虹处理效果。

void MakeColorDib::NeonLight()   //霓虹处理
{BYTE *p_data;     //原图数据区指针int wide,height,DibWidth;    //原图长、宽、字节宽p_data=this->GetData ();   //取得原图的数据区指针wide=this->GetWidth ();  //取得原图的数据区宽度height=this->GetHeight ();   //取得原图的数据区高度DibWidth=this->GetDibWidthBytes();   //取得原图的每行字节数BYTE *p_temp=new BYTE[height*DibWidth]; // 暂时分配内存,以保存新图像for(int j=0;j<height-4;j++) // 每行{for(int i=0;i<DibWidth-1;i++) // 每列{int pby_pt=0;//对像素执行算法pby_pt=(*(p_data+(height-j-1)*DibWidth+i)-*(p_data+(height-j-1)*DibWidth+i+3))*(*(p_data+(height-j-1)*DibWidth+i)-*(p_data+(height-j-1)*DibWidth+i+3))+(*(p_data+(height-j-1)*DibWidth+i)-*(p_data+(height-j-2)*DibWidth+i))*(*(p_data+(height-j-1)*DibWidth+i)-*(p_data+(height-j-2)*DibWidth+i));*(p_temp+(height-j-1)*DibWidth+i)=2*int(sqrt(pby_pt));//判断合法性if(*(p_temp+(height-j-1)*DibWidth+i)<0)*(p_temp+(height-j-1)*DibWidth+i)=0;if(*(p_temp+(height-j-1)*DibWidth+i)>255)*(p_temp+(height-j-1)*DibWidth+i)=255;}}memcpy(p_data,p_temp,height*DibWidth);  // 复制处理后的图像delete []p_temp;   //删除暂时分配内存
}

Smoothness 平滑处理

函数名称:Smoothness()
函数类型:void
功能:使图像平滑处理。

void MakeColorDib::Smoothness()   //平滑处理
{BYTE *p_data;     //原图数据区指针int wide,height,DibWidth;    //原图长、宽、字节宽p_data=this->GetData ();   //取得原图的数据区指针wide=this->GetWidth ();  //取得原图的数据区宽度height=this->GetHeight ();   //取得原图的数据区高度DibWidth=this->GetDibWidthBytes();   //取得原图的每行字节数int h[3][3];定义(3x3)矩阵h[0][0] = 1;  h[0][1] = 1; h[0][2] = 1;h[1][0] = 1;  h[1][1] = 1; h[1][2] = 1;h[2][0] = 1;  h[2][1] = 1; h[2][2] = 1;BYTE *p_temp=new BYTE[height*DibWidth]; // 暂时分配内存,以保存新图像for(int j=0;j<height-2;j++) // 每行{for(int i=0;i<DibWidth-8;i++) // 每列{double pby_pt=0;//对应的第0行的值乘以矩阵对应值,再相加pby_pt= h[0][0]*(*(p_data+(height-j-1)*DibWidth+i))+h[0][1]*(*(p_data+(height-j-1)*DibWidth+i+3))+h[0][2]*(*(p_data+(height-j-1)*DibWidth+i+6))//对应的第1行的值乘以矩阵对应值,再相加+h[1][0]*(*(p_data+(height-j-2)*DibWidth+i))+h[1][1]*(*(p_data+(height-j-2)*DibWidth+i+3))+h[1][2]*(*(p_data+(height-j-2)*DibWidth+i+6))//对应的第2行的值乘以矩阵对应值,再相加+h[2][0]*(*(p_data+(height-j-3)*DibWidth+i))+h[2][1]*(*(p_data+(height-j-3)*DibWidth+i+3))+h[2][2]*(*(p_data+(height-j-3)*DibWidth+i+6));*(p_temp+(height-j-2)*DibWidth+i+3)=abs(int(pby_pt/9));//取总和的的平均值}}memcpy(p_data,p_temp,height*DibWidth);  // 复制处理后的图像delete []p_temp;//删除暂时分配内存
}

Embossment 浮雕处理

函数名称:Embossment()
函数类型:void
功能:产生图像浮雕处理效果。

void MakeColorDib::Embossment()   //浮雕处理
{BYTE *p_data;     //原图数据区指针int wide,height,DibWidth;    //原图长、宽、字节宽p_data=this->GetData ();   //取得原图的数据区指针wide=this->GetWidth ();  //取得原图的数据区宽度height=this->GetHeight ();   //取得原图的数据区高度DibWidth=this->GetDibWidthBytes();   //取得原图的每行字节数BYTE *p_temp=new BYTE[height*DibWidth]; // 暂时分配内存,以保存新图像for(int j=0;j<height;j++) // 每行{for(int i=0;i<DibWidth-4;i++) // 每列{int pby_pt=0;//对像素得每个分量执行算法pby_pt=*(p_data+(height-j-1)*DibWidth+i)-*(p_data+(height-j-1)*DibWidth+i+3)+128;*(p_temp+(height-j-1)*DibWidth+i+3)=pby_pt;//检验合法性if(*(p_temp+(height-j-1)*DibWidth+i+3)<0)*(p_temp+(height-j-1)*DibWidth+i+3)=0;else if(*(p_temp+(height-j-1)*DibWidth+i+3)>255)*(p_temp+(height-j-1)*DibWidth+i+3)=255;}}memcpy(p_data,p_temp,height*DibWidth);  // 复制处理后的图像delete []p_temp;   //删除暂时分配内存
}

Spread 图像扩散

函数名称:Spread()
函数类型:void
功能:图像扩散处理。

void MakeColorDib::Spread()   //扩散处理
{ BYTE *p_data;     //原图数据区指针int wide,height,DibWidth;    //原图长、宽、字节宽p_data=this->GetData ();   //取得原图的数据区指针wide=this->GetWidth ();  //取得原图的数据区宽度height=this->GetHeight ();   //取得原图的数据区高度DibWidth=this->GetDibWidthBytes();   //取得原图的每行字节数BYTE *p_temp=new BYTE[height*DibWidth]; // 暂时分配内存,以保存新图像for(int j=0;j<height-4;j++) // 每行{for(int i=0;i<DibWidth-14;i++) // 每列{int m=0,n=0;m=rand()%5; //取得行随机数n=rand()%5; //取得列随机数int pby_pt=0; pby_pt=*(p_data+(height-j-1-m)*DibWidth+i+3*n);//得到对应随机像素值*(p_temp+(height-j-3)*DibWidth+i+6)=pby_pt;}}memcpy(p_data,p_temp,height*DibWidth);  // 复制处理后的图像delete []p_temp;   //删除暂时分配内存
}

Sharp 锐化

函数名称:Sharp()
函数类型:void
功能:图像锐化处理。

void MakeColorDib::Sharp()   //图像锐化
{BYTE *p_data;     //原图数据区指针int wide,height,DibWidth;    //原图长、宽、字节宽p_data=this->GetData ();   //取得原图的数据区指针wide=this->GetWidth ();  //取得原图的数据区宽度height=this->GetHeight ();   //取得原图的数据区高度DibWidth=this->GetDibWidthBytes();   //取得原图的每行字节数BYTE *p_temp=new BYTE[height*DibWidth];for(int j=0;j<height-1;j++) // 每行{for(int i=0;i<DibWidth-5;i++) // 每列{int pby_pt=0; pby_pt= *(p_data+(height-j-2)*DibWidth+i+3)-*(p_data+(height-j-1)*DibWidth+i);*(p_temp+(height-j-2)*DibWidth+i+3)=*(p_data+(height-j-2)*DibWidth+i+3)+abs(int(pby_pt/4));if(*(p_temp+(height-j-2)*DibWidth+i+3)>255)*(p_temp+(height-j-2)*DibWidth+i+3)=255;}}memcpy(p_data,p_temp,height*DibWidth);  // 复制处理后的图像delete []p_temp;  //删除暂时分配内存
}

HighLVBO 阈值法进行高通滤波

函数名称:HighLVBO(int m_GaoTong)
函数类型:void
参数:int m_GaoTong,用户给定的阈值来选择矩阵
功能:对图像使用阈值法进行高通滤波。

void MakeColorDib::HighLVBO(int m_GaoTong)   //高通滤波
{BYTE *p_data;     //原图数据区指针int wide,height,DibWidth;    //原图长、宽、字节宽p_data=this->GetData ();   //取得原图的数据区指针wide=this->GetWidth ();  //取得原图的数据区宽度height=this->GetHeight ();   //取得原图的数据区高度DibWidth=this->GetDibWidthBytes();   //取得原图的每行字节数int h[3][3];  定义(3x3)矩阵if(m_GaoTong==1){   //矩阵1(基本高通)h[0][0] =1;   h[0][1] =-2;  h[0][2] =1;h[1][0] =-2;  h[1][1] =5;   h[1][2] =-2;h[2][0] =1;   h[2][1] =-2;  h[2][2] =1;}else if(m_GaoTong==2){   //矩阵2(中等高通)h[0][0] = 0;   h[0][1] = -1; h[0][2] = 0;h[1][0] = -1;  h[1][1] =  5; h[1][2] = -1;h[2][0] = 0;   h[2][1] = -1; h[2][2] = 0;}else{   //矩阵3(过量高通)h[0][0] = -1;  h[0][1] = -1; h[0][2] = -1;h[1][0] = -1;  h[1][1] =  9; h[1][2] = -1;h[2][0] = -1;  h[2][1] = -1; h[2][2] = -1;}BYTE *p_temp=new BYTE[height*DibWidth]; // 暂时分配内存,以保存新图像for(int j=0;j<height-2;j++) // 每行{for(int i=0;i<DibWidth-8;i++) // 每列{int pby_pt=0;//对应的第0行的值乘以矩阵对应值,再相加pby_pt=  h[0][0]*(*(p_data+(height-j-1)*DibWidth+i))+h[0][1]*(*(p_data+(height-j-1)*DibWidth+i+3))+h[0][2]*(*(p_data+(height-j-1)*DibWidth+i+6))//对应的第1行的值乘以矩阵对应值,再相加+h[1][0]*(*(p_data+(height-j-2)*DibWidth+i))+h[1][1]*(*(p_data+(height-j-2)*DibWidth+i+3))+h[1][2]*(*(p_data+(height-j-2)*DibWidth+i+6))//对应的第2行的值乘以矩阵对应值,再相加+h[2][0]*(*(p_data+(height-j-3)*DibWidth+i))+h[2][1]*(*(p_data+(height-j-3)*DibWidth+i+3))+h[2][2]*(*(p_data+(height-j-3)*DibWidth+i+6));*(p_temp+(height-j-2)*DibWidth+i+3)=abs(pby_pt);if(pby_pt>255) //判断是否越界*(p_temp+(height-j-2)*DibWidth+i+3)=255;}}memcpy(p_data,p_temp,height*DibWidth);  // 复制处理后的图像delete []p_temp;  //删除暂时分配内存
}

LowLVBO 图像低通滤波

函数名称:LowLVBO()
函数类型:void
功能:实现图像低通滤波(3x3)。

void MakeColorDib::LowLVBO()   //低通滤波(3x3)
{BYTE *p_data;     //原图数据区指针int wide,height,DibWidth;    //原图长、宽、字节宽p_data=this->GetData ();   //取得原图的数据区指针wide=this->GetWidth ();  //取得原图的数据区宽度height=this->GetHeight ();   //取得原图的数据区高度DibWidth=this->GetDibWidthBytes();   //取得原图的每行字节数double h[3][3];定义(3x3)矩阵h[0][0] = 0.1;  h[0][1] = 0.1; h[0][2] = 0.1;h[1][0] = 0.1;  h[1][1] = 0.2; h[1][2] = 0.1;h[2][0] = 0.1;  h[2][1] = 0.1; h[2][2] = 0.1;BYTE *p_temp=new BYTE[height*DibWidth]; // 暂时分配内存,以保存新图像for(int j=0;j<height-2;j++) // 每行{for(int i=0;i<DibWidth-8;i++) // 每列{double pby_pt=0;//对应的第0行的值乘以矩阵对应值,再相加 pby_pt=  h[0][0]*(*(p_data+(height-j-1)*DibWidth+i))+h[0][1]*(*(p_data+(height-j-1)*DibWidth+i+3))+h[0][2]*(*(p_data+(height-j-1)*DibWidth+i+6))//对应的第0行的值乘以矩阵对应值,再相加+h[1][0]*(*(p_data+(height-j-2)*DibWidth+i))+h[1][1]*(*(p_data+(height-j-2)*DibWidth+i+3))+h[1][2]*(*(p_data+(height-j-2)*DibWidth+i+6))//对应的第0行的值乘以矩阵对应值,再相加+h[2][0]*(*(p_data+(height-j-3)*DibWidth+i))+h[2][1]*(*(p_data+(height-j-3)*DibWidth+i+3))+h[2][2]*(*(p_data+(height-j-3)*DibWidth+i+6));*(p_temp+(height-j-2)*DibWidth+i+3)=abs(int(pby_pt));}}memcpy(p_data,p_temp,height*DibWidth);  // 复制处理后的图像delete []p_temp;  //删除暂时分配内存
}

LowVBObig 低通滤波

函数名称:LowVBObig()
函数类型:void
功能:实现函数低通滤波(5*5)

void MakeColorDib::LowLVBObig()   //低通滤波(5x5)
{BYTE *p_data;     //原图数据区指针int wide,height,DibWidth;    //原图长、宽、字节宽p_data=this->GetData ();   //取得原图的数据区指针wide=this->GetWidth ();  //取得原图的数据区宽度height=this->GetHeight ();   //取得原图的数据区高度DibWidth=this->GetDibWidthBytes();   //取得原图的每行字节数int h[5][5];//定义(5x5)矩阵h[0][0] = 1;  h[0][1] = 1; h[0][2] = 1; h[0][3] = 1; h[0][4] = 1;h[1][0] = 1;  h[1][1] = 2; h[1][2] = 2; h[1][3] = 2; h[1][4] = 1;h[2][0] = 1;  h[2][1] = 2; h[2][2] = 3; h[2][3] = 2; h[2][4] = 1;h[3][0] = 1;  h[3][1] = 2; h[3][2] = 2; h[3][3] = 2; h[3][4] = 1;h[4][0] = 1;  h[4][1] = 1; h[4][2] = 1; h[4][3] = 1; h[4][4] = 1;BYTE *p_temp=new BYTE[height*DibWidth]; // 暂时分配内存,以保存新图像for(int j=0;j<height-4;j++) // 每行{for(int i=0;i<DibWidth-14;i++) // 每列{int pby_pt=0;//对应的第0行的值乘以矩阵对应值,再相加pby_pt=h[0][0]*(*(p_data+(height-j-1)*DibWidth+i))+h[0][1]*(*(p_data+(height-j-1)*DibWidth+i+3))+h[0][2]*(*(p_data+(height-j-1)*DibWidth+i+6))+h[0][3]*(*(p_data+(height-j-1)*DibWidth+i+9))+h[0][4]*(*(p_data+(height-j-1)*DibWidth+i+12))//对应的第1行的值乘以矩阵对应值,再相加+h[1][0]*(*(p_data+(height-j-2)*DibWidth+i))+h[1][1]*(*(p_data+(height-j-2)*DibWidth+i+3))+h[1][2]*(*(p_data+(height-j-2)*DibWidth+i+6))+h[1][3]*(*(p_data+(height-j-2)*DibWidth+i+9))+h[1][4]*(*(p_data+(height-j-2)*DibWidth+i+12))//对应的第2行的值乘以矩阵对应值,再相加+h[2][0]*(*(p_data+(height-j-3)*DibWidth+i))+h[2][1]*(*(p_data+(height-j-3)*DibWidth+i+3))+h[2][2]*(*(p_data+(height-j-3)*DibWidth+i+6))+h[2][3]*(*(p_data+(height-j-3)*DibWidth+i+9))+h[2][4]*(*(p_data+(height-j-3)*DibWidth+i+12))//对应的第3行的值乘以矩阵对应值,再相加+h[3][0]*(*(p_data+(height-j-4)*DibWidth+i))+h[3][1]*(*(p_data+(height-j-4)*DibWidth+i+3))+h[3][2]*(*(p_data+(height-j-4)*DibWidth+i+6))+h[3][3]*(*(p_data+(height-j-4)*DibWidth+i+9))+h[3][4]*(*(p_data+(height-j-4)*DibWidth+i+12))//对应的第4行的值乘以矩阵对应值,再相加+h[4][0]*(*(p_data+(height-j-5)*DibWidth+i))+h[4][1]*(*(p_data+(height-j-5)*DibWidth+i+3))+h[4][2]*(*(p_data+(height-j-5)*DibWidth+i+6))+h[4][3]*(*(p_data+(height-j-5)*DibWidth+i+9))+h[4][4]*(*(p_data+(height-j-5)*DibWidth+i+12));//为了计算方便我们把除以35(矩阵权和)放在求总和之后*(p_temp+(height-j-3)*DibWidth+i+6)=abs(int(pby_pt/35));}}memcpy(p_data,p_temp,height*DibWidth);  // 复制处理后的图像delete []p_temp;  //删除暂时分配内存
}

ShuiPingGROW 水平增强

函数名称:ShuiPingGROW()
函数类型:void
功能:使图像水平增强。

void MakeColorDib::ShuiPingGROW()   //水平增强
{
BYTE *p_data;     //原图数据区指针
int wide,height,DibWidth;    //原图长、宽、字节宽
p_data=this->GetData ();   //取得原图的数据区指针wide=this->GetWidth ();  //取得原图的数据区宽度height=this->GetHeight ();   //取得原图的数据区高度
DibWidth=this->GetDibWidthBytes();   //取得原图的每行字节数
int h[3][1];//定义(3x1)矩阵
h[0][0] = -1;
h[1][0] = 2;
h[2][0] = -1;
BYTE *p_temp=new BYTE[height*DibWidth]; // 暂时分配内存,以保存新图像
for(int j=0;j<height-2;j++) // 每行
{for(int i=0;i<DibWidth-8;i++) // 每列{int pby_pt=0;//对应的3行的值乘分别以矩阵对应值,再相加pby_pt= h[0][0]*(*(p_data+(height-j-1)*DibWidth+i))+h[1][0]*(*(p_data+(height-j-2)*DibWidth+i))+h[2][0]*(*(p_data+(height-j-3)*DibWidth+i));if(pby_pt>20)*(p_temp+(height-j-2)*DibWidth+i)=abs(pby_pt)+100;else*(p_temp+(height-j-2)*DibWidth+i)=abs(pby_pt);}
}
memcpy(p_data,p_temp,height*DibWidth);  // 复制处理后的图像delete []p_temp;  //删除暂时分配内存
}

ChuiZhiGROW 垂直增强

函数名称:ChuiZhiGROW()
函数类型:void
功能:使图像垂直增强。

void MakeColorDib::ChuiZhiGROW()   //垂直增强
{BYTE *p_data;     //原图数据区指针int wide,height,DibWidth;    //原图长、宽、字节宽p_data=this->GetData ();   //取得原图的数据区指针wide=this->GetWidth ();  //取得原图的数据区宽度height=this->GetHeight ();   //取得原图的数据区高度DibWidth=this->GetDibWidthBytes();   //取得原图的每行字节数int h[1][3];//定义(1x3)矩阵h[0][0] = -1; h[0][1] = 2;h[0][2] = -1;BYTE *p_temp=new BYTE[height*DibWidth]; // 暂时分配内存,以保存新图像for(int j=0;j<height-2;j++) // 每行{for(int i=0;i<DibWidth-8;i++) // 每列{int pby_pt=0;//对应的第0行的值乘以矩阵对应值,再相加pby_pt= h[0][0]*(*(p_data+(height-j-1)*DibWidth+i))+h[0][1]*(*(p_data+(height-j-1)*DibWidth+i+3))+h[0][2]*(*(p_data+(height-j-1)*DibWidth+i+6));if(pby_pt>20)*(p_temp+(height-j-2)*DibWidth+i)=abs(pby_pt)+100;else*(p_temp+(height-j-2)*DibWidth+i)=abs(pby_pt);}}memcpy(p_data,p_temp,height*DibWidth);  // 复制处理后的图像delete []p_temp;  //删除暂时分配内存
}

ShuangXiangGROW 双向增强

函数名称:ShuangXiangGROW()
函数类型:void
功能:使图像双向增强。

void MakeColorDib::ShuangXiangGROW()    //双向增强
{
BYTE *p_data;     //原图数据区指针
int wide,height,DibWidth;    //原图长、宽、字节宽
p_data=this->GetData ();   //取得原图的数据区指针wide=this->GetWidth ();  //取得原图的数据区宽度height=this->GetHeight ();   //取得原图的数据区高度
DibWidth=this->GetDibWidthBytes();   //取得原图的每行字节数
int h[3][3];//定义(3x3)矩阵
h[0][0] = -1;  h[0][1] = -1; h[0][2] = -1;
h[1][0] = -1;  h[1][1] =  8; h[1][2] = -1;
h[2][0] = -1;  h[2][1] = -1; h[2][2] = -1;
BYTE *p_temp=new BYTE[height*DibWidth]; // 暂时分配内存,以保存新图像
for(int j=0;j<height-2;j++) // 每行
{
for(int i=0;i<DibWidth-8;i++) // 每列
{int pby_pt=0;//对应的第0行的值乘以矩阵对应值,再相加pby_pt= h[0][0]*(*(p_data+(height-j-1)*DibWidth+i))+h[0][1]*(*(p_data+(height-j-1)*DibWidth+i+3))+h[0][2]*(*(p_data+(height-j-1)*DibWidth+i+6))//对应的第1行的值乘以矩阵对应值,再相加+h[1][0]*(*(p_data+(height-j-2)*DibWidth+i))+h[1][1]*(*(p_data+(height-j-2)*DibWidth+i+3))+h[1][2]*(*(p_data+(height-j-2)*DibWidth+i+6))//对应的第2行的值乘以矩阵对应值,再相加+h[2][0]*(*(p_data+(height-j-3)*DibWidth+i))+h[2][1]*(*(p_data+(height-j-3)*DibWidth+i+3))+h[2][2]*(*(p_data+(height-j-3)*DibWidth+i+6));if(pby_pt>20)*(p_temp+(height-j-2)*DibWidth+i)=abs(pby_pt)+100;else*(p_temp+(height-j-2)*DibWidth+i)=abs(pby_pt);
}
}
memcpy(p_data,p_temp,height*DibWidth);  // 复制处理后的图像
delete []p_temp;  //删除暂时分配内存
}

Mosaic 马塞克

函数名称:Mosaic()
函数类型:void
功能:使图像产生马赛克效果。

void MakeColorDib::Mosaic()    //马赛克
{BYTE *p_data;     //原图数据区指针int wide,height,DibWidth;    //原图长、宽、字节宽p_data=this->GetData ();   //取得原图的数据区指针wide=this->GetWidth ();  //取得原图的数据区宽度height=this->GetHeight ();   //取得原图的数据区高度DibWidth=this->GetDibWidthBytes();   //取得原图的每行字节数BYTE *p_temp=new BYTE[height*DibWidth]; // 暂时分配内存,以保存新图像for(int j=0;j<height-4;j+=5) // 每行{ for(int i=0;i<DibWidth-14;i+=15) // 每列{   //对应周围(5x5)矩阵蓝色值求和平均int pby_pt=0;for(int m=0;m<5;m++)for(int n=0;n<15;n+=3){   pby_pt+=*(p_data+(height-j-1-m)*DibWidth+i+n);}for(m=0;m<5;m++)for(int n=0;n<14;n+=3){*(p_temp+(height-j-1-m)*DibWidth+i+n)=int(pby_pt/25);} //对应周围(5x5)矩阵绿色值求和平均pby_pt=0;for(m=0;m<5;m++)for(int n=0;n<15;n+=3){pby_pt+=*(p_data+(height-j-1-m)*DibWidth+i+n+1);}for(m=0;m<5;m++)for(int n=0;n<14;n+=3){*(p_temp+(height-j-1-m)*DibWidth+i+n+1)=int(pby_pt/25);}//对应周围(5x5)矩阵红色值求和平均pby_pt=0;for(m=0;m<5;m++)for(int n=0;n<15;n+=3){pby_pt+=*(p_data+(height-j-1-m)*DibWidth+i+n+2);}for(m=0;m<5;m++)for(int n=0;n<14;n+=3){*(p_temp+(height-j-1-m)*DibWidth+i+n+2)=int(pby_pt/25);}}   }memcpy(p_data,p_temp,height*DibWidth);  // 复制处理后的图像delete []p_temp;  //删除暂时分配内存
}

我的个人博客文章地址,欢迎访问
我的CSDN文章地址,欢迎访问
我的简书文章地址,欢迎访问
我的GitHub主页,欢迎访问

C++图像处理函数及程序(一)相关推荐

  1. Mathcad 是一种工程计算软件,主要运算功能:代数运算、线性代数、微积分、符号计算、2D和3D图表、动画、函数、程序编写、逻辑运算、变量与单位的定义和计算等。...

    Mathcad软件包Mathcad是由MathSoft公司(2006 年4 月被美国PTC收购)推出的一种交互式数值计算系统. Mathcad 是一种工程计算软件,作为工程计算的全球标准,与专有的计算 ...

  2. 几种常用的图像处理函数库

    from:http://www.wtoutiao.com/p/18a4MqP.html 几种常用的图像处理函数库 OpenCV OpenCV的全称是:Open Source Computer Visi ...

  3. Oracle编程入门经典 第11章 过程、函数和程序包

    目录 11.1          优势和利益... 1 11.2          过程... 1 11.2.1       语法... 2 11.2.2       建立或者替换... 2 11.2 ...

  4. matlab图像处理函数

    下列表格中除了个别函数外,其余函数都是图像处理工具箱提供的关于图像处理的函数,现摘录到此以备查找. 表1 图像显示 函数名 功能说明 函数名 功能说明 colorbar 颜色条显示 montage 按 ...

  5. php图像处理原生函数,php图像处理函数imagecopyresampled的用法

    这篇文章主要介绍了php图像处理函数imagecopyresampled用法,结合实例形式详细分析了imagecopyresampled函数的功能.参数.使用方法,需要的朋友可以参考下 语法 代码如下 ...

  6. c语言中图像处理相关函数,C语言图像处理函数大全

    C语言图像处理函数 没有积分,无私奉献,只希望多多支持,哈哈谢谢了 C语言图像处理函数大全,完整版 1.图像平移 图像平移只是改变图像在屏幕上的位置,图像本身并不发生变化. 假设原图像区域左上角坐标为 ...

  7. itpt_TCPL 第四章:函数和程序结构

    2016.08.30 – 10.09 个人英文阅读练习笔记(极低水准). 08.30 第四章:函数和程序结构 函数能够将大型的计算任务分解为多个小型的计算任务,并且程序员还能够利用别人已经编写好的函数 ...

  8. 图像处理函数详解——imadjust

    功能: 调节灰度图像的亮度或彩色图像的颜色矩阵. 用法:        J = imadjust(I,[low_in; high_in],[low_out; high_out],gamma)      ...

  9. matlab怎么停止运行命令,MATLAB如何使用pause函数暂停程序运行

    MATLAB如何使用pause函数暂停程序运行 [语法说明] oldstate=pause(newsyaye):pause函数用于暂停程序运行,这一功能是可以被关闭的.newstate和oldstat ...

最新文章

  1. 谷歌迈出量子计算开源第一步,推出首个量子机器学习库TensorFlow Quantum
  2. CGI、FastCGI 知识总结
  3. 实战项目三:爬取QQ群中的人员信息
  4. 前K个高频元素(top k)(TX)
  5. python while循环if_详解python基础之while循环及if判断
  6. android第一天-------环境搭建
  7. python爬虫登录网站_python爬虫19 | 遇到需要的登录的网站怎么办?用这3招轻松搞定!...
  8. php 利用csv导,php 导入/导出 csv 文件
  9. 《Kotlin项目实战开发》 第3章 类型系统与可空类型
  10. 数据清洗之微博内容清洗
  11. Retrofit2 详解和使用(一)
  12. 《高等代数学》(姚慕生),例1.5.10
  13. TK1安装Caffe
  14. php mysql好学吗_零基础小白PHP开发好学吗
  15. 项目组数据库脚本的维护方案
  16. windows操作系统运用jacob转换文件,并添加水印
  17. UNREFERENCED_PARAMETER()宏函数
  18. 【零基础学STM32】CubeMX+HAL 喂狗小教程
  19. CDISC SDTMIG4.1.4.3 时间间隔和持续时间变量DUR的使用
  20. 【湍流】基于matlab kolmogorov结合次谐波补偿大气湍流相位屏【含Matlab源码 2178期】

热门文章

  1. node js+sql 后端分页查询效率越来越低解决方案
  2. Linux人才需求与Windows持平 职位“粥多僧少”
  3. 芒果不能用百度了,怎么办?
  4. 【pytorch】|tensor grad
  5. 共模电感的原理以及使用情况
  6. 学习笔记之js中导出表格到excel详解+源码
  7. 计算机用户管理权限有哪些,Windows系统管理员账户和普通账户的详细权限区别有哪些?...
  8. 面试了15位来自985/211高校的2020届研究生之后的思考
  9. Linux企业运维篇——git+gitlab+jenkins+docker构成持续集成环境
  10. 汉语拼音的5个声调该怎么学?