将真彩图转变为灰度图发生错位
void ColorToGray(LPSTR lpDIB, LONG lWidth, LONG lHeight)
{
ASSERT(lpDIB!=NULL);
// 图像每行的字节数
LONG lLineBytes=WIDTHBYTES(lWidth*8);
BYTE rgbBlue(0);
BYTE rgbGreen(0);
BYTE rgbRed(0);
// 真彩色图像变成灰度图像
if (DIBNumColors(lpDIB) == 0)
{
// 位图信息头
LPBITMAPINFOHEADER lpBI = (LPBITMAPINFOHEADER)lpDIB;
lpBI->biSize = 40;
lpBI->biWidth = lWidth;
lpBI->biHeight = lHeight;
lpBI->biPlanes = 1;
lpBI->biBitCount = 8;
lpBI->biCompression = 0;
lpBI->biSizeImage = lLineBytes*lHeight;
lpBI->biClrUsed = 0;
lpBI->biClrImportant = 0;
// DIB图像数据
LPBYTE lpDIBBits=LPBYTE(lpDIB+(DWORD)(*lpDIB));
LPBYTE lpdesc=new BYTE[lLineBytes*lHeight];
LONG i,j;
for (j=0; j<lHeight; j++)
{
for (i=0; i<lWidth; i++)
{
rgbBlue = *(lpDIBBits+lLineBytes*j*3+i*3);
rgbGreen = *(lpDIBBits+lLineBytes*j*3+i*3+1);
rgbRed = *(lpDIBBits+lLineBytes*j*3+i*3+2);
lpdesc[lWidth*j+i]= (BYTE)(0.299*rgbRed+0.587*rgbGreen+0.114*rgbBlue+0.5);
}
}
for(i=0;i<lHeight;i++)
{
for(j=0;j<lWidth;j++)
{
*(lpDIBBits+sizeof(RGBQUAD)*256+lLineBytes*i+j)= lpdesc[lWidth*i+j];
}
}
delete [] lpdesc;
// 添加调色板
LPBITMAPINFO lpbmi = (LPBITMAPINFO)lpDIB;
LPBITMAPCOREINFO lpbmc = (LPBITMAPCOREINFO)lpDIB;
int k=0;
if(IS_WIN30_DIB(lpDIB))
{
for (k=0; k<256; k++)
{
lpbmi->bmiColors[k].rgbRed=(BYTE)k;
lpbmi->bmiColors[k].rgbGreen=(BYTE)k;
lpbmi->bmiColors[k].rgbBlue=(BYTE)k;
lpbmi->bmiColors[k].rgbReserved=0;
}
}
else
{
for (k=0; k<256; k++)
{
lpbmc->bmciColors[k].rgbtRed=(BYTE)k;
lpbmc->bmciColors[k].rgbtGreen=(BYTE)k;
lpbmc->bmciColors[k].rgbtBlue=(BYTE)k;
}
}
}
}
相关推荐
开关柜红外过热检测数据集解析:VOC标签与温度关联实践
目标检测作为计算机视觉的核心任务,在工业巡检中发挥着关键作用。红外热像仪通过接收物体表面红外辐射生成温度分布图像,为电力设备状态监测提供了直观依据。然而,公开可用的红外目标检测数据集稀缺,且多数不包含温度标注。本文解析一个开关柜接头红外过热检测数据集,涵盖1000张真实红外图像及VOC格式XML标签,并关联温度信息表。通过拆解标签结构、温度映射逻辑、格式转换与模型训练路径,展示了如何利用该数据集训练接头检测模型,并融合温度数据进行过热缺陷分级。该数据集为电力智能巡检、红外视觉检测等工程实践提供了可靠数据基础
MATLAB图像转图形坐标:从像素坐标到物理坐标的完整实践
图像处理中,像素坐标与笛卡尔图形坐标的差异常导致可视化结果方向颠倒、比例失真,这是许多初学者和科研绘图人员面临的共同痛点。理解图像坐标系原点位于左上角、行列方向与数学坐标相反的原理,是正确进行坐标转换的基础。MATLAB作为图像处理与科学计算的主流工具,通过meshgrid、surf等函数能高效构建坐标网格,实现从一维像素索引到二维平面乃至三维曲面的映射。掌握像素坐标与物理坐标之间的换算关系,并结合实际标定比例因子,可广泛应用于显微镜图像分析、遥感影像处理及点云生成等工程场景。本文从坐标系原理出发,系统拆解
MATLAB仿真牛顿环:从干涉原理到曲率半径定量反演
干涉是波动光学中的核心概念,牛顿环作为典型的等厚干涉现象,其形成依赖于空气膜厚度变化与半波损失。通过理解光程差公式,可掌握明暗条纹的分布规律。借助MATLAB仿真,能够精确构建二维干涉场,直观再现单色光与白光下的牛顿环图像,并基于暗环半径平方与环序的线性关系,定量反推透镜曲率半径。这一方法不仅适用于光学课程设计与实验报告,还能帮助学习者在真实实验前预判条纹形态,缩小调焦误差,提升测量效率。从理论推导到数值实现,再到误差分析,本文完整展示了用MATLAB搭建物理可视化模型的全过程。
CNN图像边缘检测:细胞神经网络原理与Matlab实现详解
图像边缘检测是计算机视觉中最基础也最常用的预处理操作,传统算法如Sobel、Canny虽各具优势,但参数调优与噪声抑制始终是痛点。细胞神经网络(Cellular Neural Network)作为一种1988年提出的并行计算模型,通过局部连接的细胞单元与反馈/控制模板,在迭代中自然实现边缘响应与去噪统一,尤其适合硬件加速和实时场景。其核心状态方程、输出饱和函数以及拉普拉斯型模板设计,不仅为边缘检测提供了不同于深度学习的轻量方案,也为理解动态系统在图像处理中的应用打开窗口。在Matlab中,仅需几十行代码即可
《模式识别与数据挖掘》配套PPT课件
《模式识别与数据挖掘》配套PPT课件


图形处理/算法
