2019-03-11 16:38:29 qq_35594560 阅读数 830

第一步:是否为彩色图片(假设:是)

第二步:转为灰度图像

第三步:通过灰度阀值寻找区域

第四步:通过特征点提取,提取固定区域

第五步:对提取的区域做处理,例如填充区域,膨胀,开操作等。

 

2014-02-17 15:27:04 tuling56 阅读数 6547

数字图像处理的基本步骤:



1-9章的处理都是输入输出为图像;10-12章输入为图像,输出为对象的属性
2013-12-08 20:00:08 brotherwyz 阅读数 668
在stdafx.h里
打开 #define SELF_ANALY宏定义,可以知道数据原始操作


即可以知道一般图像处理步骤为


原始图片--> 灰度处理 ----> 边缘化


R,G,B   --->Gray = R*0.299 + G*0.587 + B*0.114  ---->将所有的图像数据变成 0或0xff(可以称为开关量)




void CopImgDlg::OnBnClickedButtonPregray()
{
// TODO: 在此添加控件通知处理程序代码
if(pSrcImg) 
cvReleaseImage(&pSrcImg);
pSrcImg = cvLoadImage("test.bmp"); //显示图片
if(pSrcImg)
{
debug_printf("open ok!\r\n");
#ifndef SELF_ANALY
CRect rect;
int cx,cy;
cx = pSrcImg->width;
cy = pSrcImg->height;


GetDlgItem(IDC_STATIC_CV)->GetWindowRect(&rect);  //相对srceen坐标值
// debug_printf("left=%d\r\n",rect.left);
// debug_printf("top=%d\r\n",rect.top);
// debug_printf("width=%d\r\n",rect.right-rect.left);
// debug_printf("height=%d\r\n",rect.bottom-rect.top);

ScreenToClient(&rect);   //相对于对话框的坐标值

// debug_printf("left=%d\r\n",rect.left);
// debug_printf("top=%d\r\n",rect.top);
// debug_printf("width=%d\r\n",rect.right-rect.left);
// debug_printf("height=%d\r\n",rect.bottom-rect.top);

GetDlgItem(IDC_STATIC_CV)->MoveWindow(rect.left,rect.top,cx,cy,true);//调整大小


CDC *pDC = GetDlgItem(IDC_STATIC_CV)->GetDC();
HDC hDC= pDC->GetSafeHdc();
GetDlgItem(IDC_STATIC_CV)->GetClientRect(&rect);   //相对于控件坐标值
debug_printf("left=%d\r\n",rect.left);
debug_printf("top=%d\r\n",rect.top);
debug_printf("width=%d\r\n",rect.right-rect.left);
debug_printf("height=%d\r\n",rect.bottom-rect.top);


CvvImage cimg;
cimg.CopyOf(pSrcImg); // 复制图片
cimg.DrawToHDC(hDC,&rect); // 将图片绘制到显示控件的指定区域内
ReleaseDC(pDC);
#else   //自己的取数据画图


CRect rect;
int cx,cy;
cx = pSrcImg->width;
cy = pSrcImg->height;

GetDlgItem(IDC_STATIC_CV)->GetWindowRect(&rect);  //相对srceen坐标值
ScreenToClient(&rect);   //相对于对话框的坐标值
GetDlgItem(IDC_STATIC_CV)->MoveWindow(rect.left,rect.top,cx,cy,true);//调整大小



   CWnd *pWnd;
CDC *pDC;


pWnd=GetDlgItem(IDC_STATIC_CV); 
pDC=pWnd->GetDC();
pWnd->Invalidate(); 
pWnd->UpdateWindow();



CPoint picPoint;
CRect picRect;
LONG picWidth,picHeigt;


pWnd->GetClientRect(&picRect);


picWidth=(picRect.right-picRect.left);
picHeigt=(picRect.bottom-picRect.top);
picPoint.x = 0;
picPoint.y = 0;

int i,j;
int widBytes;
widBytes=pSrcImg->widthStep;
debug_printf("width : %d \r\n",pSrcImg->width);
debug_printf("height : %d \r\n",pSrcImg->height);
debug_printf("widBytes : %d \r\n",widBytes);

BYTE *ptr = new BYTE[widBytes];
for(i=0;i<pSrcImg->height;i++)
{

pDC->MoveTo(picPoint);
memcpy(ptr,pSrcImg->imageData+i*widBytes,widBytes);
if(i == (pSrcImg->height/2))
debug_printf("dat : %d  %d  %d \r\n",ptr[0],ptr[1],ptr[2]);
for(j=0;j<pSrcImg->width;j++)
{




pDC->SetPixel(picPoint,RGB(ptr[j*3+2],ptr[j*3+1],ptr[j*3]));



picPoint.x ++;
}
picPoint.x = 0;
picPoint.y ++;


}



pWnd->ReleaseDC(pDC);
delete[] ptr;
#endif

}
else
{
debug_printf("open failed!\r\n");
}
}




void CopImgDlg::OnBnClickedButtonGray()
{
// TODO: 在此添加控件通知处理程序代码
if(!pSrcImg)
return;
//将颜色空间由RGB转化为Gray
pGrayImg=cvCreateImage(cvGetSize(pSrcImg),IPL_DEPTH_8U,1);
cvCvtColor(pSrcImg,pGrayImg,CV_RGB2GRAY);
#ifndef SELF_ANALY
CRect rect;

CDC *pDC = GetDlgItem(IDC_STATIC_CV)->GetDC();
HDC hDC= pDC->GetSafeHdc();
GetDlgItem(IDC_STATIC_CV)->GetClientRect(&rect);
CvvImage cimg;
cimg.CopyOf(pGrayImg); // 复制图片
cimg.DrawToHDC(hDC,&rect); // 将图片绘制到显示控件的指定区域内
ReleaseDC(pDC);
#else  //自己的取数据画图

   CWnd *pWnd;
CDC *pDC;


pWnd=GetDlgItem(IDC_STATIC_CV); 
pDC=pWnd->GetDC();
pWnd->Invalidate(); 
pWnd->UpdateWindow();



CPoint picPoint;
CRect picRect;
LONG picWidth,picHeigt;


pWnd->GetClientRect(&picRect);


picWidth=(picRect.right-picRect.left);
picHeigt=(picRect.bottom-picRect.top);
picPoint.x = 0;
picPoint.y = 0;

int i,j;
int widBytes;
widBytes=pGrayImg->widthStep;
debug_printf("width : %d \r\n",pGrayImg->width);
debug_printf("height : %d \r\n",pGrayImg->height);
debug_printf("widBytes : %d \r\n",widBytes);

BYTE *ptr = new BYTE[widBytes];
for(i=0;i<pGrayImg->height;i++)
{

pDC->MoveTo(picPoint);
memcpy(ptr,pGrayImg->imageData+i*widBytes,widBytes);
if(i == pGrayImg->height/2)
debug_printf("dat : %d  %d  %d \r\n",ptr[0],ptr[1],ptr[2]);

for(j=0;j<pGrayImg->width;j++)
{



pDC->SetPixel(picPoint,RGB(ptr[j],ptr[j],ptr[j]));



picPoint.x ++;
}
picPoint.x = 0;
picPoint.y ++;


}

pWnd->ReleaseDC(pDC);
delete[] ptr;
#endif
}




void CopImgDlg::OnBnClickedButtonCanny()
{
// TODO: 在此添加控件通知处理程序代码
if(!pGrayImg)
return;
pCannyImg = cvCreateImage(cvGetSize(pGrayImg),IPL_DEPTH_8U,1);
cvCanny(pGrayImg, pCannyImg,(float)Thresh,(float)Thresh*3, 3);
#ifndef SELF_ANALY
CRect rect;

CDC *pDC = GetDlgItem(IDC_STATIC_CV)->GetDC();
HDC hDC= pDC->GetSafeHdc();


GetDlgItem(IDC_STATIC_CV)->GetClientRect(&rect);
CvvImage cimg;
cimg.CopyOf(pCannyImg); // 复制图片
cimg.DrawToHDC(hDC,&rect); // 将图片绘制到显示控件的指定区域内
ReleaseDC(pDC);
#else  //自己的取数据画图

   CWnd *pWnd;
CDC *pDC;


pWnd=GetDlgItem(IDC_STATIC_CV); 
pDC=pWnd->GetDC();
pWnd->Invalidate(); 
pWnd->UpdateWindow();



CPoint picPoint;
CRect picRect;
LONG picWidth,picHeigt;


pWnd->GetClientRect(&picRect);


picWidth=(picRect.right-picRect.left);
picHeigt=(picRect.bottom-picRect.top);
picPoint.x = 0;
picPoint.y = 0;

int i,j;
int widBytes;
widBytes=pCannyImg->widthStep;
debug_printf("width : %d \r\n",pCannyImg->width);
debug_printf("height : %d \r\n",pCannyImg->height);
debug_printf("widBytes : %d \r\n",widBytes);

BYTE *ptr = new BYTE[widBytes];
for(i=0;i<pCannyImg->height;i++)
{


debug_printf("\r\ndat : ");
pDC->MoveTo(picPoint);
memcpy(ptr,pCannyImg->imageData+i*widBytes,widBytes);
// if(i == pCannyImg->height/2)
// debug_printf("dat : %d  %d  %d \r\n",ptr[0],ptr[1],ptr[2]);
for(j=0;j<pCannyImg->width;j++)
{


debug_printf(" %x",ptr[j]);
pDC->SetPixel(picPoint,RGB(ptr[j],ptr[j],ptr[j]));



picPoint.x ++;
}
picPoint.x = 0;
picPoint.y ++;


}

debug_printf("\r\n");


pWnd->ReleaseDC(pDC);
delete[] ptr;
#endif
}

2019-06-11 21:17:10 Hu_helloworld 阅读数 1087

1.4数字图像处理的基本步骤

数字图像处理的内容划分为以下两个主要类别:一类是其输入输出都是图像。一类是其输入可能是图像,但输出是从这些图像中提取的属性。
在这里插入图片描述

  1. 图像获取是数字图像处理的第一步处理。图像获取与给出一幅数字形式的图像一样简单。通常,图像获取阶段包括图像预处理,譬如图像缩放。
  2. 图像增强是对一幅图像进行操作,使其结果在特定应用中比原始图像更适合进行处理。“特定”一词很重要,因为增强技术建立在面向问题的基础上,例如,对增强X射线图像十分有用的方法,对增强电磁波谱中红外波段获取的卫星图像可能就不是好方法。不存在图像增强方法的通用理论,图像增强方法多种多样,特殊情况特殊对待。
  3. 图像复原也是改进图像外观的处理领域。与图像增强不同,图像增强是主观的,而图像复原是客观的;复原技术倾向于以图像退化的数学或概率模型为基础。而增强以什么是好的增强效果这种主观偏爱为基础。
  4. 彩色图像处理,第6章涵盖许多彩色模型和数字域彩色处理的基本概念。彩色也是图像中提取感兴趣区域的基础。
  5. 小波是以不同分辨率来描述图像的基础。本书中为图像数据压缩和金字塔表示使用了小波,此时图像被成功地细分为较小的区域。
  6. 压缩指的是减少图像存储量或降低图像带宽的处理。互联网是以大量的图片内容为特征的,例如,jpg文件扩展名用于jpeg的图像压缩标准。jpeg格式的图像可以用最少的磁盘空间得到较好的图像质量。
  7. 形态学处理涉及提取图像成分的工具,这些成分在表示和描述形状方面很有用。这一章的内容将从输出图像处理到输出图像属性处理的转换开始。
  8. 分割过程将一幅图像划分为其组成部分或目标。通常,自动分割是数字图像处理中最困难的任务之一。成功地把目标逐一分割出来是一个艰难的分割过程。通常,分割越准确,识别越成功。
  9. 表示与描述,选择一种表示仅是把原始数据转换为适合计算机进行后续处理的形式的一部分。为描述数据以使感兴趣的特征更加明显,必须确定一种方法。描述又称为特征选择,它涉及提取特征,可得到某些感兴趣的定量信息,或是区分一组目标与其他目标的基础
  10. 目标识别,是基于目标的描述给该目标赋予标志(如“车辆”)的过程。
2019-04-02 22:46:47 weixin_43227685 阅读数 2094

图像处理基本流程

导入图像—>去噪处理—>图像增强—>图像复原—>彩色图像转变成灰度图—>灰度图转化成二值图
—>边缘检测/分割—>直方图匹配/轮廓匹配—>图像处理—>图像压缩—>图像存储

图像处理基本知识

阅读数 12457

没有更多推荐了,返回首页