共2条
1/1 1 跳转至页
问
毕业设计:要求用单片机进行简易的图象处理,单片机使用PHILIP的89LV52,请问高手,帮帮忙吧!!!!我确实觉得摸不着头脑啊! 能不能给我一些指导或者有意义的网站??在下先谢过!!!
答 1:
估计作为用来滤波可以。
答 2:
如果图像很小,不要求速度,单片机也是也可以的不知道“简易”到什么程度
答 3:
处理什么?是压缩,解压,传送,显示,还是寻找图形边缘之类的数据处理?
但首先得弄清楚图象的数据格式才好做文章
去这里下载文件格式大全
http://bbs.21ic.com/upfiles/img/2006519049233.rar
去这里看文件格式大全
http://www.moon-soft.com/program/FORMAT/#图形文件 答 4: 简易处理就是做些简单的数字图象处理,滤波,2值化,具体要怎么做啊!以前从来没有接触过,求教高手了!处理之后,把图象送给LCD显示. 答 5: 先弄清楚图象的数据格式找到图象数据区,再0101地逐点比较慢慢玩
一般图象文件都有个文件头,
去这里下载文件格式大全
http://bbs.21ic.com/upfiles/img/2006519049233.rar
去这里看文件格式大全
http://www.moon-soft.com/program/FORMAT/#图形文件
弄懂图象格式就能去棹文件头,找到数据区进行处理了
答 6: 单片机有没有办法显示JPEG格式的图象?液晶应该如何选择? 答 7: 还是要用函数吗?图象数据通过P0口传入单片机,此时是不是还是要用一些函数来处理这些数据啊? 答 8: 如果不是bmp档,而是压缩文档,首先要解压缩这部分工作若允许的话,用pc机找个软件来转换为上策
若只能用单片机来做,则麻烦大了,必须先找到压缩方法的算法,再用单片机来实现.哈哈,慢慢地磨吧.
bmp档去掉文件头后,剩下的是bitmap---位图,"1","0"直接对应图象中的亮点和暗点,用单片机是很容易处理的.除此以外的jpg,GIF档都是压缩文件,数据不直接对应图象点阵. 答 9: 用单片机+FPGA到可以实现在VGA上显示 答 10: 先转换为bmp吧,这种类型的项目肯定会跟上位机配套的琢磨单片机处理gif,jpg什么的没意义,自己玩玩还可以。 答 11: 详细说明没有所谓的BMP,GIF格式,因为我的图象是从指纹传感器采集而来的数据,还不具图象的说法哈!但是要求单片机处理这些指纹图象数据,最后把数据送到LCD上显示。 答 12: 晕,早点说呀指纹采集器及开发包,人家是靠软件赚银子的,没那么容易让人破解的,哈哈,歇搁吧,让别人也混口饭吃.
网上搜"指纹锁",但只有叫卖开发包的.
如果你能确定数据是1:1的点阵就好办了,不过不会有人这么便宜你的,除非是自己做的. 答 13: 我哭啊!我还是搞不懂啊
但是老师要求我做啊!我哭死了! 答 14: 唉!不要只会哭,
网上有很多“指纹传感器”
也有很多应用资料
只要搜一下就有
另:
你最好是问{“指纹传感器”怎么用}
而不是问{用单片机怎样进行图象处理啊?}
答 15: 做了的其他的我都做了,就只是单片机处理图像这方面了.有用的资料我都找过了哈 答 16: 当然可以处理先把单片机的RAM扩展到能存2~3个图像,对RAM内的东西整来整去就行。
指纹的图像不大的。二值化,滤波,孤立点清除,缩放。就是速度超慢
而已,不过你是学习,不是做产品。图像处理算法博大精深,不是你能
处理的,找一两个简单的实现就可以了。细化、数学形态学处理运算量
大可能就做不了,压缩什么的别想。
答 17: 有些懂了!谢谢!!非常感谢!! 答 18: 去这里看http://www.biocn.com/service.htm
答 19: 二值化算法在网上搜了一下,都是些象这样类似的算法,估计这种算法只能用在计算机上面,要在单片机内部使用恐怕不行,请高手再指点一下。谢谢!!
附:
// 迭代法
BOOL WINAPI MeanThreshold(LPSTR lpDIBBits, LONG lWidth, LONG lHeight)
{
// 指向源图像的指针
LPSTR lpSrc;
// 指向缓存图像的指针
LPSTR lpDst;
// 指向缓存DIB图像的指针
LPSTR lpNewDIBBits;
HLOCAL hNewDIBBits;
// 循环变量
long i;
long j;
// 像素值
unsigned char pixel;
// 灰度直方图数组
long lHistogram[256];
// 阈值, 最大灰度值与最小灰度值, 两个区域的平均灰度值
unsigned char iThreshold, iNewThreshold, iMaxGrayValue, iMinGrayValue, iMean1GrayValue, iMean2GrayValue;
// 用于计算 (最小灰度-阈值),(阈值-最大灰度) 两个区域的中间变量
long lP1, lP2, lS1, lS2;
// 迭代次数
int iIterationTimes;
// 图像每行的字节数
LONG lLineBytes;
// 暂时分配内存, 以保存新图像
hNewDIBBits = LocalAlloc(LHND, lWidth * lHeight);
if (hNewDIBBits == NULL)
{
// 分配内存失败
return FALSE;
}
// 锁定内存
lpNewDIBBits = (char *) LocalLock(hNewDIBBits);
// 初始化新分配的内存, 设定初始值为255
lpDst = (char *) lpNewDIBBits;
memset(lpDst, (BYTE)255, lWidth * lHeight);
// 计算每行的字节数
lLineBytes = WIDTHBYTES(lWidth * 8);
for(i= 0; i < 256; i++)
{
lHistogram[i] = 0;
}
// 获得灰度直方图 灰度最大值和最小值
iMaxGrayValue = 0;
iMinGrayValue = 255;
for(i= 0; i < lWidth; i++)
{
for(j= 0; j < lHeight; j++)
{
// 指向源图像倒数第j行,第i个象素的指针
lpSrc = (char *)lpDIBBits + lLineBytes * j + i;
pixel = (unsigned char) *lpSrc;
lHistogram[pixel]++;
//修改最大,最小灰度值
if(iMinGrayValue > pixel)
{
iMinGrayValue = pixel;
}
if(iMaxGrayValue < pixel)
{
iMaxGrayValue = pixel;
}
}
}
// 迭代求最佳阈值
iNewThreshold = (iMinGrayValue + iMaxGrayValue)/2;
iThreshold = 0;
for(iIterationTimes = 0; iIterationTimes < 100 && iThreshold != iNewThreshold; iIterationTimes++)
{
iThreshold = iNewThreshold;
lP1 = 0;
lS1 = 0;
lP2 = 0;
lS2 = 0;
// 求以iNewThresHold分割的两个区域的灰度平均值
for(i = iMinGrayValue; i < iThreshold; i++)
{
lP1 += lHistogram[i] * i;
lS1 += lHistogram[i];
}
iMean1GrayValue = (unsigned char) (lP1/lS1);
for(i = iThreshold + 1; i < iMaxGrayValue; i++)
{
lP2 += lHistogram[i] * i;
lS2 += lHistogram[i];
}
iMean2GrayValue = (unsigned char) (lP2/lS2);
iNewThreshold = (iMean1GrayValue + iMean2GrayValue)/2;
}
// 根据阈值将图像二值化
for(i = 0; i < lWidth; i++)
{
for(j = 0; j < lHeight; j++)
{
lpSrc = (char *) lpDIBBits + lLineBytes * j + i;
lpDst = (char *) lpNewDIBBits + lLineBytes * j + i;
pixel = (unsigned char) *lpSrc;
if (pixel <= iThreshold)
{
*lpDst = (unsigned char)0;
}
else
{
*lpDst = (unsigned char)255;
}
}
}
// 复制图像
memcpy(lpDIBBits, lpNewDIBBits, lWidth * lHeight);
// 释放内存
LocalUnlock(hNewDIBBits);
LocalFree(hNewDIBBits);
// 返回
return TRUE;
}
但首先得弄清楚图象的数据格式才好做文章
去这里下载文件格式大全
http://bbs.21ic.com/upfiles/img/2006519049233.rar
去这里看文件格式大全
http://www.moon-soft.com/program/FORMAT/#图形文件 答 4: 简易处理就是做些简单的数字图象处理,滤波,2值化,具体要怎么做啊!以前从来没有接触过,求教高手了!处理之后,把图象送给LCD显示. 答 5: 先弄清楚图象的数据格式找到图象数据区,再0101地逐点比较慢慢玩
一般图象文件都有个文件头,
去这里下载文件格式大全
http://bbs.21ic.com/upfiles/img/2006519049233.rar
去这里看文件格式大全
http://www.moon-soft.com/program/FORMAT/#图形文件
弄懂图象格式就能去棹文件头,找到数据区进行处理了
答 6: 单片机有没有办法显示JPEG格式的图象?液晶应该如何选择? 答 7: 还是要用函数吗?图象数据通过P0口传入单片机,此时是不是还是要用一些函数来处理这些数据啊? 答 8: 如果不是bmp档,而是压缩文档,首先要解压缩这部分工作若允许的话,用pc机找个软件来转换为上策
若只能用单片机来做,则麻烦大了,必须先找到压缩方法的算法,再用单片机来实现.哈哈,慢慢地磨吧.
bmp档去掉文件头后,剩下的是bitmap---位图,"1","0"直接对应图象中的亮点和暗点,用单片机是很容易处理的.除此以外的jpg,GIF档都是压缩文件,数据不直接对应图象点阵. 答 9: 用单片机+FPGA到可以实现在VGA上显示 答 10: 先转换为bmp吧,这种类型的项目肯定会跟上位机配套的琢磨单片机处理gif,jpg什么的没意义,自己玩玩还可以。 答 11: 详细说明没有所谓的BMP,GIF格式,因为我的图象是从指纹传感器采集而来的数据,还不具图象的说法哈!但是要求单片机处理这些指纹图象数据,最后把数据送到LCD上显示。 答 12: 晕,早点说呀指纹采集器及开发包,人家是靠软件赚银子的,没那么容易让人破解的,哈哈,歇搁吧,让别人也混口饭吃.
网上搜"指纹锁",但只有叫卖开发包的.
如果你能确定数据是1:1的点阵就好办了,不过不会有人这么便宜你的,除非是自己做的. 答 13: 我哭啊!我还是搞不懂啊
但是老师要求我做啊!我哭死了! 答 14: 唉!不要只会哭,
网上有很多“指纹传感器”
也有很多应用资料
只要搜一下就有
另:
你最好是问{“指纹传感器”怎么用}
而不是问{用单片机怎样进行图象处理啊?}
答 15: 做了的其他的我都做了,就只是单片机处理图像这方面了.有用的资料我都找过了哈 答 16: 当然可以处理先把单片机的RAM扩展到能存2~3个图像,对RAM内的东西整来整去就行。
指纹的图像不大的。二值化,滤波,孤立点清除,缩放。就是速度超慢
而已,不过你是学习,不是做产品。图像处理算法博大精深,不是你能
处理的,找一两个简单的实现就可以了。细化、数学形态学处理运算量
大可能就做不了,压缩什么的别想。
答 17: 有些懂了!谢谢!!非常感谢!! 答 18: 去这里看http://www.biocn.com/service.htm
01、生物技术公司大型网站 | 01、什么是生物识别技术? |
02、生物识别带来真正的安全便捷 | 02、什么是拒真率和认假率? |
03、几种生物识别技术的比较 | 03、指纹识别比密码可靠? |
04、指纹身份识别的可靠性 | 04、什么是指纹? |
05、指纹识别技术最新应用 | 05、为什么有干手指问题? |
06、指纹识别技术概论 | 06、指纹门禁有何优点? |
07、指纹的几种取像技术和特点 | 07、社保管理为什么用指纹? |
08、指纹识别的基本原理 | 08、深安有几种指纹门禁? |
09、面像识别技术原理 | 09、什么是指纹考勤机? |
10、国外优秀指纹识别系统 | 10、为什么用指纹考勤机? |
11、面像识别技术 | 11、指纹门禁与卡门禁区别? |
12、指纹识别技术 | 12、指纹IC卡如何协和工作? |
13、视网膜识别技术 | 13、指纹门禁如何连网? |
14、虹膜识别技术 | 14、什么是指纹鼠标? |
15、静脉识别技术 | 15、为什么指纹设备价格高? |
16、声音及签名识别技术 | 16、指纹严重受伤怎么办? |
17、多种考勤系统比较 | 17、无法采集指纹怎么办? |
18、静脉识别系统 FAQ | 18、什么是电锁,电锁种类? |
19、为何要选用指纹考勤机 | 19、什么是指纹可采集率? |
20、多种考勤设备投入比较 | 20、指纹可以复制吗? |
21、指纹IC卡使用原理 | 21、1:1和1:N区别是什么? |
22、掌形机的工作原理 | 22、掌形机最大的优点? |
答 19: 二值化算法在网上搜了一下,都是些象这样类似的算法,估计这种算法只能用在计算机上面,要在单片机内部使用恐怕不行,请高手再指点一下。谢谢!!
附:
// 迭代法
BOOL WINAPI MeanThreshold(LPSTR lpDIBBits, LONG lWidth, LONG lHeight)
{
// 指向源图像的指针
LPSTR lpSrc;
// 指向缓存图像的指针
LPSTR lpDst;
// 指向缓存DIB图像的指针
LPSTR lpNewDIBBits;
HLOCAL hNewDIBBits;
// 循环变量
long i;
long j;
// 像素值
unsigned char pixel;
// 灰度直方图数组
long lHistogram[256];
// 阈值, 最大灰度值与最小灰度值, 两个区域的平均灰度值
unsigned char iThreshold, iNewThreshold, iMaxGrayValue, iMinGrayValue, iMean1GrayValue, iMean2GrayValue;
// 用于计算 (最小灰度-阈值),(阈值-最大灰度) 两个区域的中间变量
long lP1, lP2, lS1, lS2;
// 迭代次数
int iIterationTimes;
// 图像每行的字节数
LONG lLineBytes;
// 暂时分配内存, 以保存新图像
hNewDIBBits = LocalAlloc(LHND, lWidth * lHeight);
if (hNewDIBBits == NULL)
{
// 分配内存失败
return FALSE;
}
// 锁定内存
lpNewDIBBits = (char *) LocalLock(hNewDIBBits);
// 初始化新分配的内存, 设定初始值为255
lpDst = (char *) lpNewDIBBits;
memset(lpDst, (BYTE)255, lWidth * lHeight);
// 计算每行的字节数
lLineBytes = WIDTHBYTES(lWidth * 8);
for(i= 0; i < 256; i++)
{
lHistogram[i] = 0;
}
// 获得灰度直方图 灰度最大值和最小值
iMaxGrayValue = 0;
iMinGrayValue = 255;
for(i= 0; i < lWidth; i++)
{
for(j= 0; j < lHeight; j++)
{
// 指向源图像倒数第j行,第i个象素的指针
lpSrc = (char *)lpDIBBits + lLineBytes * j + i;
pixel = (unsigned char) *lpSrc;
lHistogram[pixel]++;
//修改最大,最小灰度值
if(iMinGrayValue > pixel)
{
iMinGrayValue = pixel;
}
if(iMaxGrayValue < pixel)
{
iMaxGrayValue = pixel;
}
}
}
// 迭代求最佳阈值
iNewThreshold = (iMinGrayValue + iMaxGrayValue)/2;
iThreshold = 0;
for(iIterationTimes = 0; iIterationTimes < 100 && iThreshold != iNewThreshold; iIterationTimes++)
{
iThreshold = iNewThreshold;
lP1 = 0;
lS1 = 0;
lP2 = 0;
lS2 = 0;
// 求以iNewThresHold分割的两个区域的灰度平均值
for(i = iMinGrayValue; i < iThreshold; i++)
{
lP1 += lHistogram[i] * i;
lS1 += lHistogram[i];
}
iMean1GrayValue = (unsigned char) (lP1/lS1);
for(i = iThreshold + 1; i < iMaxGrayValue; i++)
{
lP2 += lHistogram[i] * i;
lS2 += lHistogram[i];
}
iMean2GrayValue = (unsigned char) (lP2/lS2);
iNewThreshold = (iMean1GrayValue + iMean2GrayValue)/2;
}
// 根据阈值将图像二值化
for(i = 0; i < lWidth; i++)
{
for(j = 0; j < lHeight; j++)
{
lpSrc = (char *) lpDIBBits + lLineBytes * j + i;
lpDst = (char *) lpNewDIBBits + lLineBytes * j + i;
pixel = (unsigned char) *lpSrc;
if (pixel <= iThreshold)
{
*lpDst = (unsigned char)0;
}
else
{
*lpDst = (unsigned char)255;
}
}
}
// 复制图像
memcpy(lpDIBBits, lpNewDIBBits, lWidth * lHeight);
// 释放内存
LocalUnlock(hNewDIBBits);
LocalFree(hNewDIBBits);
// 返回
return TRUE;
}
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |