
添加注释快捷键为: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图像中的数据并存入数组等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)