BYTE*到底什么意思啊?

MISAYAONE 2015-11-23 10:14:18
/***********************************************************************
* Sobel边缘检测 (scale=0.5)
* 参数: image0为原图形,image1为边缘检测结果,w、h为图像的宽和高
* 当type为true时,差分结果取水平和垂直方向差分中较大者,否则取平均值
************************************************************************/
void SideSobel(BYTE* image0, BYTE* image1, unsigned int w, unsigned int h, bool type)
{
int x, y, a, aHr, aHg, aHb, aVr, aVg, aVb, aH, aV;
long n;
double scale = 0.5;
//依次处理每个像素
for(y = 1; y < h-1; y++)
for(x = 1; x < w-1; x++)
{
//计算像素的偏移位置
n = (y*w+x)*4;
//计算红色分量水平灰度差
aHr = abs( (image0[n-w*4-4]+image0[n-4]*2+image0[n+w*4-4])
- (image0[n-w*4+4]+image0[n+4]*2+image0[n+w*4+4]) );
//计算红色分量垂直灰度差
aVr = abs( (image0[n-w*4-4]+image0[n-w*4]*2+image0[n-w*4+4])
- (image0[n+w*4-4]+image0[n+w*4]*2+image0[n+w*4+4]) );
//计算绿色分量水平灰度差
aHg = abs( (image0[n-w*4-4+1]+image0[n-4+1]*2+image0[n+w*4-4+1])
- (image0[n-w*4+4+1]+image0[n+4+1]*2+image0[n+w*4+4+1]) );
//计算绿色分量垂直灰度差
aVg = abs( (image0[n-w*4-4+1]+image0[n-w*4+1]*2+image0[n-w*4+4+1])
- (image0[n+w*4-4+1]+image0[n+w*4+1]*2+image0[n+w*4+4+1]) );
//计算蓝色分量水平灰度差
aHb = abs( (image0[n-w*4-4+2]+image0[n-4+2]*2+image0[n+w*4-4+2])
- (image0[n-w*4+4+2]+image0[n+4+2]*2+image0[n+w*4+4+2]) );
//计算蓝色分量垂直灰度差
aVb = abs( (image0[n-w*4-4+2]+image0[n-w*4+2]*2+image0[n-w*4+4+2])
- (image0[n+w*4-4+2]+image0[n+w*4+2]*2+image0[n+w*4+4+2]) );


//计算水平综合灰度差
aH = aHr + aHg + aHb;
//计算垂直综合灰度差
aV = aVr + aVg + aVb;


if(type)
{
//取水平和垂直方向差分中较大者
if(aH > aV) a = aH;
else a = aV;
}
else
{
//取水平和垂直方向差分的平均值
a = (aH + aV)/2;
}
a = a *scale;
a = a>255?255:a;
//生成边缘扫描结果
SetPixel(image1,n,a);
}
}


我想问下那个BYTE* image0, BYTE* image1到底是什么意思?图片的指针吗?怎样给他们赋值?
...全文
13677 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
遮住你的眼睛 2017-03-22
  • 打赏
  • 举报
回复
引用 5 楼 lm_whales 的回复:
你应该给出图像的像素信息部分,不是什么赋值 一个简单的办法是,打开一幅图像,存储为32Bits位图 然后在程序中读出位图的全部信息,并把数据部分指针传递给Image0 新建一幅灰度图,大小和原来的相同,数据部分指针传递给Image1 然后调用这个函数 这是图像边缘检测函数,是边缘检测算法的一个实现。
如果图像是tif格式的则打开文件肯定是char* szFileName = "K:\\地图\\fujian-DEM\\fujian1.tif"; TIFF* tiff = TIFFOpen(szFileName, "r");//打开Tiff文件,得到指针,以后所有的操作都通过指针进行 把tiff带到Image0的位置显示TIFF *类型的实参与BYTE* 类型的形参不兼容怎么办呢?谢谢你!
赵4老师 2015-11-23
  • 打赏
  • 举报
回复
VS IDE中,在不明白的符号上点鼠标右键,选转到定义。
MISAYAONE 2015-11-23
  • 打赏
  • 举报
回复
那我应该具体怎么给image0,image1赋值,将图片的数据指针直接赋给他们吗?
lm_whales 2015-11-23
  • 打赏
  • 举报
回复
如果不是RGB图像,也差不多,就是图像的每个像素点的颜色数据部分。
lm_whales 2015-11-23
  • 打赏
  • 举报
回复
图像的数据,自己看调用这段程序的代码(应该有示例) 如果是BMP,就是每个像素点的颜色数据部分。 这应该是32BIts RGB 或者RGBA图像 这些数据,应该从图像中读取出来
lm_whales 2015-11-23
  • 打赏
  • 举报
回复
你应该给出图像的像素信息部分,不是什么赋值 一个简单的办法是,打开一幅图像,存储为32Bits位图 然后在程序中读出位图的全部信息,并把数据部分指针传递给Image0 新建一幅灰度图,大小和原来的相同,数据部分指针传递给Image1 然后调用这个函数 这是图像边缘检测函数,是边缘检测算法的一个实现。

64,266

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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