VS2008中如何批量注释 图像像素数据获取

VS2008中如何批量注释 图像像素数据获取,第1张

添加注释快捷键为:Ctrl+K,Ctrl+C解除注释快捷键为:Ctrl+K,Ctrl+U这种快捷键还是头一次看到 OpenCV中获取图像指定位置处的像素值CvScalar s;s=cvGet2D(src,i,j);printf("%d",sval[0]);printf("%d",sval[1]);printf("%d",sval[2]);或者,直接对指针进行 *** 作uchar p=src->imageData;p[isrc->widthStep+j];联合在一起就是 ((uchar)(src->imageData))[isrc->widthStep+j];注意双括号及其位置。

试试Digitizer这个插件。

下载地址:>

文件指针指向的是一个保存文件信息的结构,在你用fread读取文件的时候它就自动把读取位置向后移动了,这个你不用管他。

代码如下:

const RGBQUAD undefinedQuad={0,0,0,0};

const DWORD _16bitMask=(1<<5)-1;

RGBQUAD ReadBmpFile(const char filename,BITMAPFILEHEADER header,BITMAPINFOHEADER infoheader,RGBQUAD index=NULL)

{

DWORD pxcnt;

DWORD i;

RGBQUAD pixels=NULL;

BYTE bits=NULL;

FILEfile=fopen(filename,"rb");

fread(header,sizeof(BITMAPFILEHEADER),1,file);

fread(infoheader,sizeof(BITMAPINFOHEADER),1,file);

RGBQUAD palette=NULL;

//如果有调色板,则调用调色板

if(infoheader->biBitCount<24)

{

palette=(RGBQUAD)malloc(sizeof(RGBQUAD)infoheader->biClrUsed);

fread(palette,sizeof(RGBQUAD),infoheader->biClrUsed,file);

}

pxcnt=infoheader->biHeightinfoheader->biWidth;

pixels=(RGBQUAD)malloc(sizeof(RGBQUAD)pxcnt);

//从header->bfOffBits开始读取,

fseek(file,header->bfOffBits,SEEK_SET);

if(infoheader->biBitCount<=24)

{

bits=(BYTE)malloc(infoheader->biSizeImage);

fread(bits,1,infoheader->biSizeImage,file);

//如果有调色板,则将复制到对应像素

switch(infoheader->biBitCount)

{

case 1:

case 2:

case 4:

{

for(i=0;i<pxcnt;i++)

{

DWORD px=bits[iinfoheader->biBitCount>>8]>>(i&7)&((1<<infoheader->biBitCount)-1);//取得某一个位置的像素

if(px<infoheader->biClrUsed)

pixels[i]=palette[px];

else

pixels[i]=undefinedQuad;

}

}

break;

case 8:

{

for(i=0;i<pxcnt;i++)

{

DWORD px=bits[i];//取得某一个位置的像素

if(px<infoheader->biClrUsed)//出于安全问题,限制色彩范围。

pixels[i]=palette[px];

else

pixels[i]=undefinedQuad;//超出调色板范围,

}

}

break;

case 16:

{

//16位增强色

//一般是RGB各5bit

WORD pxwd=(WORD)bits;

for(i=0;i<pxcnt;i++)

{

pixels[i]rgbBlue=pxwd[i]&_16bitMask;

pixels[i]rgbGreen=(pxwd[i]>>5)&_16bitMask;

pixels[i]rgbRed=(pxwd[i]>>10)&_16bitMask;

pixels[i]rgbReserved=0;

}

}

break;

case 24:

{

//将三个字节的数据扩展为4字节的

for(i=0;i<pxcnt;i++)

{

pixels[i]rgbBlue=bits[i3];

pixels[i]rgbGreen=bits[i3+1];

pixels[i]rgbRed=bits[i3+2];

pixels[i]rgbReserved=0;

}

}

}

free(bits);

if(index==NULL)

free(palette);

else

index=palette;

}

else

{

//如果没有调色板,则直接使用文件内的区域。

fread(pixels,1,infoheader->biSizeImage,file);

}

fclose(file);

return pixels;

}

在VS2008上测试通过,应该也能在VC6上通过。

我的邮箱IkariEnator@gmailcom

以上就是关于VS2008中如何批量注释 图像像素数据获取全部的内容,包括:VS2008中如何批量注释 图像像素数据获取、ORIGIN 怎么从已经做出的图像中提取数据、如何读取一副BMP图像中的数据并存入数组等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9675950.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存