[自学讨论区]何东健主编《数字图像处理》

sxshao 2005-03-14 09:11:48
人家的程序注释写的全。
...全文
280 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sxshao 2005-04-07
  • 打赏
  • 举报
回复
推荐这本书。

一起探讨程序吧。
hslinux 2005-03-18
  • 打赏
  • 举报
回复
汗!~~~这么说两句分就全归我了。。。。。。。。

对于图象处理,我也是刚开始学。这方面也没什么经验,我上面说的只是一些编程风格的问题。对于初学者,当然是注释多点的代码好些,,,,

关于图象处理,我现在在看手头上的基本书《VC++数字图像处理》,《数字图像处理及模式识别》,《数字图像处理与压缩编码技术》,《现代图像处理技术与应用》,,

只是在看而已,,HOHO~~~~~~~,,都还没搞懂,,《VC++数字图像处理》比较简单些。
shaosx 2005-03-15
  • 打赏
  • 举报
回复
to hslinux(幻世龙) ( ) 信誉:104 ,

请推荐个更好的。
hslinux 2005-03-14
  • 打赏
  • 举报
回复
case 1: //每像素位数为1,不处理
break;
case 4: //每像素位数为4,不处理
break;
case 8: //每像素位数为8

注释多不见得一定好,”//变量定义“我想大家都知道吧,,,,

还有些常量最好用宏来表示比直接用数字直观明了多,,,
sxshao 2005-03-14
  • 打赏
  • 举报
回复
看看人家的注释:
|
|
|
|


////////////////////////////////////////////////////////////////////////
//int *CreateHistogram()
//----------------------------------------------------------------------
//基本功能:本函数创建传入的CDibObject对象中图像的直方图。如果进行此调
// 整之前没有指定一个CDibObject对象指针,则必须在调整时加以指
// 定。任何未传入的坐标值或默认的-1坐标值都将被置为图像的最大值
// 或最大植。变量nX1和nY1将被置为0,nX2将被置为图像宽度减1,nY2
// 将被置为图像高度减1。想要在整个图像上进行操作时,最好的方法
// 是不传入nX1、nY1、nX2和nY2值。这样它们会被默认为整个图像。
//----------------------------------------------------------------------
//参数说明:int nX1 默认为-1
// int nY1 默认为-1
// int nX2 默认为-1
// int nY2 默认为-1
// unsigned char *pData 图像位图数据指针
// RGBQUAD *pPalette 图像调色板指针
// int nWidthBytes 图像字节宽度
// CDibObject *pDibObject 默认为NULL。
//----------------------------------------------------------------------
//返 回:直方图数组指针*pBuffer其中:
// pBuffer[] 存储亮度直方图数据
// pBuffer[256] 存储红色直方图数据
// pBuffer[512] 存储绿色直方图数据
// pBuffer[768] 存储蓝直方图数据
//----------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////
int *CPointPro::CreateHistogram( int nX1, int nY1, int nX2, int nY2,
unsigned char *pData, RGBQUAD *pPalette,
int nWidthBytes, CDibObject *pDibObject )
{

//图像指针为空,无法操作返回
if( pDibObject != NULL ) m_pDibObject = pDibObject;
if( m_pDibObject == NULL ) return( FALSE );

//分配直方图数据缓存区(数组)
int *pBuffer = new int [256 * 4];
//分配直方图数据缓存区失败
if( pBuffer == NULL ) return( NULL );
//直方图数据缓存区清零
memset( pBuffer, 0, ( 256 * 4) * sizeof( int ) );

//变量定义
DWORD dwGray;
int x, y;
unsigned char *pTemp, ucRed, ucGreen, ucBlue;

//图像的高度
int nHeight = m_pDibObject->GetHeight();


。。。


sxshao 2005-03-14
  • 打赏
  • 举报
回复
to: wjnana@sohu.com
from: @cpms.com.cn
title: 何东健主编《数字图像处理》程序的一点问题

(1)第四章 PointPro.cpp

BOOL CPointPro::MakeGray256(BYTE mGrayType, CDibObject *pDibObject )
......
switch( m_pDibObject->GetNumBits() )
......
case 16: //16位色真彩色图像
......
switch( mGrayType )
......
case 1:
......
//按亮度Y=R将彩色图像转换为灰度图像
dwGray = (ucRed * 30 + ucGreen * 59 +ucBlue * 11) / 100; //【error】
......
类似的还有 case 2: 和 case 3: 拷贝 case 0: 错了。

(3)第四章 PointPro.cpp

int *CPointPro::CreateHistogram( int nX1, int nY1, int nX2, int nY2,
unsigned char *pData, RGBQUAD *pPalette, int nWidthBytes, CDibObject *pDibObject )

......
switch( m_pDibObject->GetNumBits() )
{
case 1: //每像素位数为1,不处理
break;
case 4: //每像素位数为4,不处理
break;
case 8: //每像素位数为8
for( y = nY1; y <= nY2; y++ )
{
//数据指针定位到图像数据起始位置
pTemp = pData;
//数据指针定位到图像数据每行的起始零位置
pTemp += ( ( nHeight - 1 - y ) * nWidthBytes );
//数据指针定位到图像数据每行的起始nX1位置
pTemp += nX1; //【error】
for( x = nX1; x <= nX2; x++ )
{
//pTemp[x]为当前像素值,它为调色板项的索引值,
//以此为索引,取出调色板项的相应红绿蓝分量值。
ucRed = pPalette[pTemp[x]].rgbRed;
ucGreen = pPalette[pTemp[x]].rgbGreen;
......

case 8: 当 nX1 > 0 时,pTemp 定位就错位了。“pTemp += nX1;”此行应删除,或改“ucRed = pPalette[pTemp[x]].rgbRed;”为“ucRed = pPalette[pTemp[x - nX1]].rgbRed;”
case 24: 也是如此,错的更厉害一些了。

(4)第四章 PointPro.cpp

int CPointPro::FindThresh_Auto( CDibObject *pDibObject )

计算 MaxPiex2 和 MaxGray2 的算法不通。


19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧