分享
 
 
 

ASP.NET 或 PHP 图象高手来

王朝知道·作者佚名  2009-05-04
窄屏简体版  字體: |||超大  
 
分類: 電腦/網絡 >> 程序設計 >> 其他編程語言
 
問題描述:

我有一张照片 现在我吧它用PS弄成卡通效果 保存现在有手里就有了两张拉,一张卡通个 一张现实的在ASP.NET 或PHP里面有没有办法判断出这两张图片近视相同 颜色近视相同和轮廓近视相同?请高手指教QQ:***********E-mail:luyinhunba@163.com谢谢观看!

參考答案:

1、首先不知道你所谓的卡通是什么样子的?

2、经过PS后(你提到了卡通效果)应该在饱和度、某点的颜色值都发生了变化,当然色深度也有可能变了。

提供一个思路:将两张图片在内存中都转化为,相同色深的位图,然后灰度处理,再然后利用边缘检测法判断边缘(这里是有局限性的,需要背景比较明显,如果背景也是图像效果不好,此法的代码在网上应该可以找到)。然后记录边缘的矩阵值,把两个做比较,设置允许差错范围(比如100边缘数据里有90个以上的值一致就认为是同一张图)

当然,在处理速度上你自己再看看二次样条、傅利叶、插值等算法吧…

哥们,你这个项目不是个小项目呀!如果真是个本科生的毕设,那个学校的老师也太牛了!如果有这个学校,我希望到那里上研!强……

补充:轮廓提取算法

/*************************************************************************

*

* 函数名称:

* ContourDIB()

*

* 参数:

* LPSTR lpDIBBits - 指向源DIB图像指针

* LONG lWidth - 源图像宽度(象素数,必须是4的倍数)

* LONG lHeight - 源图像高度(象素数)

* 返回值:

* BOOL - 运算成功返回TRUE,否则返回FALSE。

*

* 说明:

* 该函数用于对图像进行轮廓提取运算。

*

* 要求目标图像为只有0和255两个灰度值的灰度图像。

************************************************************************/

BOOL WINAPI ContourDIB(LPSTR lpDIBBits, LONG lWidth, LONG lHeight)

{

// 指向源图像的指针

LPSTR lpSrc;

// 指向缓存图像的指针

LPSTR lpDst;

// 指向缓存DIB图像的指针

LPSTR lpNewDIBBits;

HLOCAL hNewDIBBits;

//循环变量

long i;

long j;

unsigned char n,e,s,w,ne,se,nw,sw;

//像素值

unsigned char pixel;

// 暂时分配内存,以保存新图像

hNewDIBBits = LocalAlloc(LHND, lWidth * lHeight);

if (hNewDIBBits == NULL)

{

// 分配内存失败

return FALSE;

}

// 锁定内存

lpNewDIBBits = (char * )LocalLock(hNewDIBBits);

// 初始化新分配的内存,设定初始值为255

lpDst = (char *)lpNewDIBBits;

memset(lpDst, (BYTE)255, lWidth * lHeight);

for(j = 1; j <lHeight-1; j++)

{

for(i = 1;i <lWidth-1; i++)

{

// 指向源图像倒数第j行,第i个象素的指针

lpSrc = (char *)lpDIBBits + lWidth * j + i;

// 指向目标图像倒数第j行,第i个象素的指针

lpDst = (char *)lpNewDIBBits + lWidth * j + i;

注意要转换为unsigned char型

pixel = (unsigned char)*lpS

//取得当前指针处的像素值,rc;

//目标图像中含有0和255外的其它灰度值

// if(pixel != 255 && pixel != 0)

// return FALSE;

if(pixel == 0)

{

*lpDst = (unsigned char)0;

nw = (unsigned char)*(lpSrc + lWidth -1);

n = (unsigned char)*(lpSrc + lWidth );

ne = (unsigned char)*(lpSrc + lWidth +1);

w = (unsigned char)*(lpSrc -1);

e = (unsigned char)*(lpSrc +1);

sw = (unsigned char)*(lpSrc - lWidth -1);

s = (unsigned char)*(lpSrc - lWidth );

se = (unsigned char)*(lpSrc - lWidth +1);

//如果相邻的八个点都是黑点

if(nw+n+ne+w+e+sw+s+se==0)

{

*lpDst = (unsigned char)255;

}

}

}

}

// 复制腐蚀后的图像

memcpy(lpDIBBits, lpNewDIBBits, lWidth * lHeight);

// 释放内存

LocalUnlock(hNewDIBBits);

LocalFree(hNewDIBBits);

// 返回

return TRUE;

}

/*************************************************************************

*

* 函数名称:

* TraceDIB()

*

* 参数:

* LPSTR lpDIBBits - 指向源DIB图像指针

* LONG lWidth - 源图像宽度(象素数,必须是4的倍数)

* LONG lHeight - 源图像高度(象素数)

* 返回值:

* BOOL - 运算成功返回TRUE,否则返回FALSE。

*

* 说明:

* 该函数用于对图像进行轮廓跟踪运算。

*

* 要求目标图像为只有0和255两个灰度值的灰度图像。

************************************************************************/

BOOL WINAPI TraceDIB(LPSTR lpDIBBits, LONG lWidth, LONG lHeight)

{

// 指向源图像的指针

LPSTR lpSrc;

// 指向缓存图像的指针

LPSTR lpDst;

// 指向缓存DIB图像的指针

LPSTR lpNewDIBBits;

HLOCAL hNewDIBBits;

// 图像每行的字节数

LONG lLineBytes;

//循环变量

long i;

long j;

//像素值

unsigned char pixel;

//是否找到起始点及回到起始点

bool bFindStartPoint;

//是否扫描到一个边界点

bool bFindPoint;

//起始边界点与当前边界点

Point StartPoint,CurrentPoint;

//八个方向和起始扫描方向

int Direction[8][2]={{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0}};

int BeginDirect;

// 计算图像每行的字节数

lLineBytes = WIDTHBYTES(lWidth * 8);

// 暂时分配内存,以保存新图像

hNewDIBBits = LocalAlloc(LHND, lLineBytes * lHeight);

if (hNewDIBBits == NULL)

{

// 分配内存失败

return FALSE;

}

// 锁定内存

lpNewDIBBits = (char * )LocalLock(hNewDIBBits);

// 初始化新分配的内存,设定初始值为255

lpDst = (char *)lpNewDIBBits;

memset(lpDst, (BYTE)255, lLineBytes * lHeight);

//先找到最左上方的边界点

bFindStartPoint = false;

for (j = 0;j < lHeight && !bFindStartPoint;j++)

{

for(i = 0;i < lWidth && !bFindStartPoint;i++)

{

// 指向源图像倒数第j行,第i个象素的指针

lpSrc = (char *)lpDIBBits + lLineBytes * j + i;

//取得当前指针处的像素值,注意要转换为unsigned char型

pixel = (unsigned char)*lpSrc;

if(pixel == 0)

{

bFindStartPoint = true;

StartPoint.Height = j;

StartPoint.Width = i;

// 指向目标图像倒数第j行,第i个象素的指针

lpDst = (char *)lpNewDIBBits + lLineBytes * j + i;

*lpDst = (unsigned char)0;

}

}

}

//由于起始点是在左下方,故起始扫描沿左上方向

BeginDirect = 0;

//跟踪边界

bFindStartPoint = false;

//从初始点开始扫描

CurrentPoint.Height = StartPoint.Height;

CurrentPoint.Width = StartPoint.Width;

while(!bFindStartPoint)

{

bFindPoint = false;

while(!bFindPoint)

{

//沿扫描方向查看一个像素

lpSrc = (char *)lpDIBBits + lLineBytes * ( CurrentPoint.Height + Direction[BeginDirect][1])

+ (CurrentPoint.Width + Direction[BeginDirect][0]);

pixel = (unsigned char)*lpSrc;

if(pixel == 0)

{

bFindPoint = true;

CurrentPoint.Height = CurrentPoint.Height + Direction[BeginDirect][1];

CurrentPoint.Width = CurrentPoint.Width + Direction[BeginDirect][0];

if(CurrentPoint.Height == StartPoint.Height && CurrentPoint.Width == StartPoint.Width)

{

bFindStartPoint = true;

}

lpDst = (char *)lpNewDIBBits + lLineBytes * CurrentPoint.Height + CurrentPoint.Width;

*lpDst = (unsigned char)0;

//扫描的方向逆时针旋转两格

BeginDirect--;

if(BeginDirect == -1)

BeginDirect = 7;

BeginDirect--;

if(BeginDirect == -1)

BeginDirect = 7;

}

else

{

//扫描方向顺时针旋转一格

BeginDirect++;

if(BeginDirect == 8)

BeginDirect = 0;

}

}

}

// 复制腐蚀后的图像

memcpy(lpDIBBits, lpNewDIBBits, lWidth * lHeight);

// 释放内存

LocalUnlock(hNewDIBBits);

LocalFree(hNewDIBBits);

// 返回

return TRUE;

}

小贴士:① 若网友所发内容与教科书相悖,请以教科书为准;② 若网友所发内容与科学常识、官方权威机构相悖,请以后者为准;③ 若网友所发内容不正确或者违背公序良俗,右下举报/纠错。
 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有