
用for循环遍历所有需要处理的文件即可。
如果文件的命名有规律(例如0001bmp, 0002bmp, ),可以用sprintf函数直接生成文件名;
如果不满足上述条件,但文件在集中存放某个文件夹中,可以用dir获取文件列表;
如果文件没有规律,存放的位置也比较乱,那就直接手写一个cell数组,用以指定要处理的文件列表。
1、灰度转换-->二值化(硬阈值或者动态阈值处理)-->连通区域-->抠图(reduce_domin)
2、创建一个与原始图像一样大小纯黑色的图像gen_image_const()
3、将抠图得到的目标图像与创建的纯黑图像拼接,union1()
4、运用for循环,遍历每个坐标,获取灰度值(get_grayval),将灰度值等于0的剔除,剩下的就是目标灰度值与对应的坐标。
比价原始的办法,不知道是否有更简单的方法
Bitmap bmp = new Bitmap(100, 100);
using (Graphics g = GraphicsFromImage(bmp))
{
gFillEllipse(BrushesRed, new Rectangle(0, 0, 80, 80));
gFillRectangle(new SolidBrush(ColorFromArgb(128, ColorGreen)), new Rectangle(20, 20, 80, 80));
}
eGraphicsDrawImage(bmp, new Point(10, 10));
//简单的
ControlPaintDrawImageDisabled(eGraphics, bmp, 120, 10, ColorWhite);
//用颜色矩阵
SystemDrawingImagingImageAttributes attr = new SystemDrawingImagingImageAttributes();
float[][] colorMatrixElements = {
new float[] {33f, 33f, 33f, 0, 0}, // r = (r+g+b)/3
new float[] {33f, 33f, 33f, 0, 0}, // g = (r+g+b)/3
new float[] {33f, 33f, 33f, 0, 0}, // b = (r+g+b)/3
new float[] {0, 0, 0, 1, 0}, // alpha scaling factor of 1
new float[] {0, 0, 0, 0, 1}}; //
SystemDrawingImagingColorMatrix matrix = new SystemDrawingImagingColorMatrix(colorMatrixElements);
attrSetColorMatrix(matrix);
eGraphicsDrawImage(bmp, new Rectangle(10, 120, 100, 100), 0, 0, 100, 100, GraphicsUnitPixel, attr);
1调用matlab的图像读取函数imread读,把放在work文件夹下
I = imread('样品jpg');
2变为灰度图
G = rgb2gray(I);
3双击workspace中的G项,在d出的array edit中就看到了灰度矩阵
1、首先要了解bmp位图的格式,搜索些技术支持文档,bmp位图基本上是分4大部分,文件信息结果部分,文件头信息结果部分,调色板结果部分,后面就是数据实体部分。及其每个部分对应有用的信息。比如长宽。当然长宽信息你自己可以从window系统下看得到。打开bmp文件,把前面三部分的字节总数给固定下来,逐个字符读取,然后读取数据实体部分,输出就可以了。
2、例程:
#include <stdioh>#include <stdlibh>
#pragma pack(2)
/定义WORD为两个字节的类型/
typedef unsigned short WORD;
/定义DWORD为e四个字节的类型/
typedef unsigned long DWORD;
/位图文件头/
typedef struct BMP_FILE_HEADER
{
WORD bType; / 文件标识符 /
DWORD bSize; / 文件的大小 /
WORD bReserved1; / 保留值,必须设置为0 /
WORD bReserved2; / 保留值,必须设置为0 /
DWORD bOffset; / 文件头的最后到图像数据位开始的偏移量 /
} BMPFILEHEADER;
/位图信息头/
typedef struct BMP_INFO
{
DWORD bInfoSize; / 信息头的大小 /
DWORD bWidth; / 图像的宽度 /
DWORD bHeight; / 图像的高度 /
WORD bPlanes; / 图像的位面数 /
WORD bBitCount; / 每个像素的位数 /
DWORD bCompression; / 压缩类型 /
DWORD bmpImageSize; / 图像的大小,以字节为单位 /
DWORD bXPelsPerMeter; / 水平分辨率 /
DWORD bYPelsPerMeter; / 垂直分辨率 /
DWORD bClrUsed; / 使用的色彩数 /
DWORD bClrImportant; / 重要的颜色数 /
} BMPINF;
/彩色表/
typedef struct RGB_QUAD
{
WORD rgbBlue; / 蓝色强度 /
WORD rgbGreen; / 绿色强度 /
WORD rgbRed; / 红色强度 /
WORD rgbReversed; / 保留值 /
} RGBQUAD;
int main()
{
FILE fp;
BMPFILEHEADER fileHeader;
BMPINF infoHeader;
long offset, bmpImageSize, width, height, bytesPerPixel, size, bitCount;
// int i, j;
// unsigned char p;
WORD c;
if((fp = fopen("5bmp", "rb")) == NULL)
{
printf("Cann't open the file!\n");
exit(0);
}
fseek(fp, 0, 0);
fread(&fileHeader, sizeof(fileHeader), 1, fp);
fread(&infoHeader, sizeof(infoHeader), 1, fp);
//计算并输出位图数据的偏移量,图像的大小,宽度和高度,每个像素点所占的字节
size = fileHeaderbSize;
offset = fileHeaderbOffset;
bmpImageSize = infoHeaderbmpImageSize;
width = infoHeaderbWidth;
height = infoHeaderbHeight;
bitCount = infoHeaderbBitCount;
bytesPerPixel = infoHeaderbBitCount / 8;
printf("%d %d %d %d %d %d\n", size, offset, bmpImageSize, width, height, bitCount, bytesPerPixel);
//输出每个像素点所占字节中的内容
c = fgetc(fp);
while (!feof(fp))
{
printf("%x ", c);
c = fgetc(fp);
}
printf("\n");
fclose(fp);
return 0;
}
读入rgb图像——i=imread();
然后转换成灰度图像——i=rgb2gray(i);
计算均值——mean(mean(i));
计算方差——var();
用imread("")把读进来,再转换成grey模式(灰度模式),得到的就是一个灰度矩阵,要获取某个点的灰度值就和数字矩阵中获得某个点的数的方法是一样的;例如:
i=imread('tuxiangjpg');%i是彩色图像
i1=rgb2gray(i);%i1就是灰度图像
i1(x,y)%就是(x,y)点的灰度值
i1(x1:x2,y1:y2)%就是图像一部分的灰度矩阵!
以上就是关于matlab如何批量提取图像灰度值全部的内容,包括:matlab如何批量提取图像灰度值、halcon如何提取轮廓里面的每个像素点的灰度值、如题,C#怎样获取灰度图的灰度值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)