主题:关于区域填充的程序,麻烦高手帮忙看一下
这是算法:
[color=0000FF](1)首先标记像素矩阵左上角的特征值为 1,然后从上往下 、从左向右扫描像素矩阵 ,如果当前像素为255(空白像素),且该像素相邻八邻域中的上方四邻域(左边 ,左上 ,顶部 ,右上)中有标记 ,则将当前像素标记。若 当前像素为 255,且上方四邻域 中没有标记 1,则用标记 2给予标记 ;
(2)从下往上、从右向左对像素矩阵进行扫描,若当前像素有标记 2,其下方四邻域(右边、右下 、下边 、左下)中有标记 1,则将其换为标记 1;
(3)没有标记 1的像素用零(全黑)填充[/color]
我编的程序:
Array=new int [m_imgWidth*m_imgHeight];
memset(Array,0,m_imgWidth*m_imgHeight);
//首先标记左上角的特征值为1
* Array=1;
//左 -〉右,上 -〉下,扫描
for(i=1;i<m_imgHeight+1;i++)
for(j=1;j<m_imgWidth+1;j++)
{
//找到一个白点
if(*(m_pImgData+i*lineByte+j)==255)
{
if(*(Array+i*lineByte+j-1)==1)
*(Array+i*lineByte+j)=1;
if(*(Array+(i-1)*lineByte+j-1)==1)
*(Array+i*lineByte+j)=1;
if(*(Array+(i-1)*lineByte+j)==1)
*(Array+i*lineByte+j)=1;
if(*(Array+(i-1)*lineByte+j+1)==1)
*(Array+i*lineByte+j)=1;
else
*(Array+i*lineByte+j)=2;
}
}
//填充
for(i=1;i<m_imgHeight;i++)
for(j=1;j<m_imgWidth;j++){
if(*(Array+i*lineByte+j)!=1)
*(m_pImgDataOut+i*lineByte+j)=255;
else
*(m_pImgDataOut+i*lineByte+j)=*(m_pImgData+i*lineByte+j);
调试没有错,但是一运行就会终止程序,到底哪出问题了呢?
[color=0000FF](1)首先标记像素矩阵左上角的特征值为 1,然后从上往下 、从左向右扫描像素矩阵 ,如果当前像素为255(空白像素),且该像素相邻八邻域中的上方四邻域(左边 ,左上 ,顶部 ,右上)中有标记 ,则将当前像素标记。若 当前像素为 255,且上方四邻域 中没有标记 1,则用标记 2给予标记 ;
(2)从下往上、从右向左对像素矩阵进行扫描,若当前像素有标记 2,其下方四邻域(右边、右下 、下边 、左下)中有标记 1,则将其换为标记 1;
(3)没有标记 1的像素用零(全黑)填充[/color]
我编的程序:
Array=new int [m_imgWidth*m_imgHeight];
memset(Array,0,m_imgWidth*m_imgHeight);
//首先标记左上角的特征值为1
* Array=1;
//左 -〉右,上 -〉下,扫描
for(i=1;i<m_imgHeight+1;i++)
for(j=1;j<m_imgWidth+1;j++)
{
//找到一个白点
if(*(m_pImgData+i*lineByte+j)==255)
{
if(*(Array+i*lineByte+j-1)==1)
*(Array+i*lineByte+j)=1;
if(*(Array+(i-1)*lineByte+j-1)==1)
*(Array+i*lineByte+j)=1;
if(*(Array+(i-1)*lineByte+j)==1)
*(Array+i*lineByte+j)=1;
if(*(Array+(i-1)*lineByte+j+1)==1)
*(Array+i*lineByte+j)=1;
else
*(Array+i*lineByte+j)=2;
}
}
//填充
for(i=1;i<m_imgHeight;i++)
for(j=1;j<m_imgWidth;j++){
if(*(Array+i*lineByte+j)!=1)
*(m_pImgDataOut+i*lineByte+j)=255;
else
*(m_pImgDataOut+i*lineByte+j)=*(m_pImgData+i*lineByte+j);
调试没有错,但是一运行就会终止程序,到底哪出问题了呢?