问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

下面是关于C++ Sobel算子的程序代码 相关知识了解 语句看不懂 希望大神能帮我注释下 方便我理解 谢谢

发布网友 发布时间:2022-04-23 04:47

我来回答

1个回答

热心网友 时间:2023-10-15 06:23

//Sobel算子
BOOL SySobel(HDIB hDib)
{
if(hDib==NULL)return FALSE;

LPBYTE lpBits=FindDIBBits((LPBYTE)GlobalLock(hDib));
BITMAPINFO *bmi = (BITMAPINFO *)GlobalLock(hDib);
LPBITMAPINFOHEADER lpbi = (LPBITMAPINFOHEADER)bmi;
int nx,ny;
int height,width;
// get color number
WORD wNumColors = DIBNumColors((LPBYTE)bmi);
height=bmi->bmiHeader.biHeight;
width=bmi->bmiHeader.biWidth;

double gray;
double grayl;
double grayr;

BYTE **logImg;//二维缓冲区
logImg=new BYTE *[height];
for(ny=0;ny<height;ny++)
logImg[ny]=new BYTE [width];

BYTE **logImg1;//二维缓冲区
logImg1=new BYTE *[height];
for(ny=0;ny<height;ny++)
logImg1[ny]=new BYTE [width];

BYTE **logImg2;//二维缓冲区
logImg2=new BYTE *[height];
for(ny=0;ny<height;ny++)
logImg2[ny]=new BYTE [width];

lpBits=(LPBYTE)lpbi+lpbi->biSize+(int)wNumColors*sizeof(RGBQUAD);//获取数据矩阵指针
int nDelta = WIDTHBYTES(lpbi->biBitCount*lpbi->biWidth) - lpbi->biWidth*lpbi->biBitCount/8;

for ( ny=0; ny<height; ny++)
{
for ( nx=0; nx<width; nx++)
{
gray=*(lpBits);
logImg[ny][nx]=(BYTE)gray;
logImg1[ny][nx]=(BYTE)gray;
logImg2[ny][nx]=(BYTE)gray;
lpBits++;
}
lpBits += nDelta;
}

for( ny=1; ny<(height-1); ny++)
{
for( nx=1; nx<(width-1); nx++)
{

//gray=(BYTE)sqrt(grayl*grayl+grayr*grayr);
grayr=fabs(grayr);
grayl=fabs(grayl);
if (grayr>255)
logImg1[ny][nx]=255;
else
logImg1[ny][nx]=(BYTE)grayr;
if (grayl>255)
logImg2[ny][nx]=255;
else
logImg2[ny][nx]=(BYTE)grayr;
}
}lpBits=(LPBYTE)lpbi+lpbi->biSize+(int)wNumColors*sizeof(RGBQUAD);//获取数据矩阵指针

for( ny=1; ny<(height-1); ny++)
{
for( nx=1; nx<(width-1); nx++)
{
if(logImg2[ny][nx]>logImg1[ny][nx])
{
logImg1[ny][nx]=logImg2[ny][nx];
}
}
}

for ( ny=0; ny<lpbi->biHeight; ny++)
{
for ( nx=0; nx<lpbi->biWidth; nx++)
{
gray=logImg1[ny][nx];
*(lpBits)=(BYTE)gray;
lpBits++;
}
lpBits += nDelta;
}

for(ny=0;ny<height;ny++)
delete [] logImg[ny];
delete [] logImg;
for(ny=0;ny<height;ny++)
delete [] logImg1[ny];
delete [] logImg1;
for(ny=0;ny<height;ny++)
delete [] logImg2[ny];
delete [] logImg2;
GlobalUnlock(hDib);
//WaitCursorEnd();
return TRUE;
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
男人醉女人累原歌 我大概在2009年玩的很早的一款冒险动作游戏有一关是埃及狗头人主角捡武... 提成点数怎么算公式 Huamei/华美每日粗粮粗纤维饼-适用对象 0pp01107格式化后成白屏且不能开机怎么办 五邑大学是市属还是省属 五邑大学校区有几个 窝瓜焖荷包蛋怎么做? 达科塔·芬妮简要生平 湖北自动冷库多少钱 一些论文中提到的八方向的Sobel算子是怎么编程和实现的 Matlab关于图像边缘提取,用Sobel算子、Roberts算子、Prewitt算子,加QQ详谈 急用!! sobel算子原理是怎样的 sobel 算子和 canndy 算子的区别 sobel算子为什么是一阶导数 Sobel算子是什么? sobel算子里的阈值是怎么设的 Sobel算子的核心公式 Sobel和Kirsch算子的优缺点 sobel边缘检测优缺点与canny算子的优缺点? Sobel算子的介绍 美的中央空调是遥控还是线控 空调摇控加线控 美的空调遥控器控制空调不启动是为什么? 美的中央空调,标配线控,用遥控器可以遥控吗? 天加空调线控器遥控器是几档调速吗?有无背光? 大金空调线控与摇控能否同时用? 格力空调线控器怎么打开图解 空调线控器和遥控器还有区域控制器的区别 中央空调使用遥控器好还是线控器好? 边缘检测算子有哪些?它们各有什么优缺点 matlab:试采用Sobel算子对一幅256灰度图像进行边缘提取 sobel 算子的计算 Gx,Gy为a图 急求sobel算子检测边缘 Matlab程序代码 求用C语言用Sobels算子方法编写图像边缘提取的程序算法!(急) 怎样制作小麦胚芽 小麦胚芽生吃还是熟吃 谁知道小麦胚芽有什么用? 长期吃小麦胚芽的危害是什么? 小麦胚芽有什么作用? 小麦胚芽的特点是什么? 小麦胚芽一天适宜吃多少克? 如何辨识小麦胚芽 小麦胚芽怎么吃? 小麦胚芽营养价值高吗? 藕带是莲藕的哪个部位 藕带和藕是什么关系呀? 藕带究竟是什么?是嫩藕吗? 藕和藕带有什么区别 藕带是什么 藕带的做法 藕带的功效与作用