1、数字图像处理考试试题答案数字图像期末考试班级: 12级计科3班 学号: 1250312025 姓名: 郝耀峰 题 目编写程序,读入下图并输出图中所有图形的周长,即图像边缘的长度(单位:个像素)。1.在menu菜单栏的边缘与轮廓下加入计算周长菜单项,设置计算周长菜单项ID为ID_Perimeter2.在edegecontour.h中加入声明计算周长函数long WINAPI Long(LPSTR lpDIBBits, LONG lWidth, LONG lHeight);3.在edgecontour.cpp中加入/ *计算周长*long WINAPI Long(LPSTR lpDIBBits,
2、LONG lWidth, LONG lHeight)/ 指向源图像的指针 / 指向源图像的指针 LPSTR lpSrc; / 指向缓存图像的指针 LPSTR lpDst; / 指向缓存DIB图像的指针 LPSTR lpNewDIBBits; HLOCAL hNewDIBBits; /循环变量 long i; long j; /像素值 double result; unsigned char pixel; / 暂时分配内存,以保存新图像 hNewDIBBits = LocalAlloc(LHND, lWidth * lHeight); if (hNewDIBBits = NULL) / 分配内存
3、失败 return 0; / 锁定内存 lpNewDIBBits = (char * )LocalLock(hNewDIBBits); / 初始化新分配的内存,设定初始值为255 lpDst = (char *)lpNewDIBBits; memset(lpDst, (BYTE)255, lWidth * lHeight); /灰度为0的像素点的个数 long int Total=0; / 每行 for(i = 1; i lHeight-1; i+) / 每列 for(j = 1; j GetHDIB(); / 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的边缘检测,其它的可以
4、类推) if (:DIBNumColors(lpDIB) != 256) / 提示用户 MessageBox(目前只支持256色位图的运算!, 系统提示 , MB_ICONINFORMATION | MB_OK); / 解除锁定 :GlobalUnlock(HGLOBAL) pDoc-GetHDIB(); / 返回 return; / 更改光标形状 BeginWaitCursor(); / 找到DIB图像象素起始位置 lpDIBBits = :FindDIBBits(lpDIB); / 调用RobertDIB()函数对DIB进行边缘检测/ if (RobertDIB(lpDIBBits, WI
5、DTHBYTES(:DIBWidth(lpDIB) * 8), :DIBHeight(lpDIB) long sum=Long(lpDIBBits, WIDTHBYTES(:DIBWidth(lpDIB)*8), :DIBHeight(lpDIB); CString s; s.Format(%ld, sum); MessageBox(边缘长度为+s, 图像边缘长度 ,MB_OK); / 解除锁定 :GlobalUnlock(HGLOBAL) pDoc-GetHDIB(); / 恢复光标 EndWaitCursor();6.在ch1_1View.h中加入声明7.运行,打开图片,选择边缘与轮廓-边缘检测-Robert算子得到下图。8.选择边缘与轮廓-计算周长
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1