社区
C++ Builder
帖子详情
如何用图像来显示一个灰度值矩阵?
Jansonlee
2002-03-30 09:18:27
各位大虾:
已经取出了一幅灰度图像的灰度值(100*100矩阵,255),如何将其重新显示为一幅灰度图像?谢了!
...全文
1847
15
打赏
收藏
如何用图像来显示一个灰度值矩阵?
各位大虾: 已经取出了一幅灰度图像的灰度值(100*100矩阵,255),如何将其重新显示为一幅灰度图像?谢了!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
hchile
2002-04-03
打赏
举报
回复
int gray[100][100];//灰度矩阵
设为
byte gray[100][100];//灰度矩阵
不更好吗?
hdaq
2002-04-03
打赏
举报
回复
jansonlee(刽子手)
Sorry 更正一下上次的代码:
newbmp->Palette = Image1->Picture->Bitmap->Palette;
改为:
newbmp->Palette = CopyPalette(Image1->Picture->Bitmap->Palette);
Cbfan
2002-04-02
打赏
举报
回复
唔?怎么没反应??
Cbfan
2002-04-02
打赏
举报
回复
是呀。VCL默认都是16色的。
hdaq
2002-04-02
打赏
举报
回复
cbfan
BCB中封装的TICON好像不太好用,这你从BCB自带的Image Editor就可以看出来,实际上ExtractIcon提取图标已经把图标中的256Icon提出来了,只不过是在存盘时以16色保存的,所以自己用AP编了,具体参考APi关于Icon的函数了,我也没用过,有什么再进展告诉你
kingcaiyao
2002-04-01
打赏
举报
回复
其实,你可以制作一幅位图,位图的数据结构也很简单,一个BITMAPINFOHEADER,BITMAPFILEHEADER。你用三个字节来表示一个点,那么根着下来你直接写数据就可以了。在C++ BUILDER中你可以用TFileStream来写。
Cbfan
2002-04-01
打赏
举报
回复
借宝地一用,嘿嘿,不好意思~~~
请问hdaq(一生何求),看来你对图形很有研究,能不能帮我看看,会给分的。
从.exe文件中用ExtractIcon提取图标,为什么只能提取16色的????(内附源码)
http://www.csdn.net/expert/topic/532/532964.xml?temp=.8520471
Jansonlee
2002-04-01
打赏
举报
回复
一生何求、冰冰凉:
先谢过了。抱歉偶没有说清楚,待处理的是8位黑白图像。 灰度值矩阵中存储的只是单一的0-255的灰度(从一幅黑白图像中读取,并无R,G,B分量)。
我以前用ScanLine取出一整列的点,然后:
Byte *ptr;
ptr=static_cast<Byte*>(bitmap1->ScanLine[j]);
* ptr[i]=gray[i][j];
(省去若干循环语句)
但就在*语句出现问题,gray数组中存储的是整型(0-255),但ptr中是以二进制数存储的,无法进行转换。
二位有无他法?谢过!
hdaq
2002-04-01
打赏
举报
回复
jansonlee(刽子手)
如果您要把一个矩阵赋值给8位灰度图,那么首先你要先把那个8位灰度图的调色板(Palette)搞定,最简单的方法就是你先要有一个8位的灰度图的调色板。如下
放一个TImage,设计时或运行时在Image1中调入一幅8位灰度图,(调入8位灰度图既得其调色板,否则则要自己创建8位灰度的Palette)。8位的代码如下
Byte *NewScanLine;//行扫描
int gray[100][100];//灰度矩阵
for(int i = 0 ; i<100;i++)
{
for(int j = 0 ;j<100;j++) gray[i][j] = i+ j;//模拟值
}
Graphics::TBitmap *newbmp=new Graphics::TBitmap();
newbmp->Width = 100;
newbmp->Height = 100;
newbmp->PixelFormat = pf8bit;//8位位图
newbmp->Palette = Image1->Picture->Bitmap->Palette;//一定要保证Image1调入的是8位灰度图,则Image1中的Palette为8位灰度调色板
for(int i=0;i<100;i++) //height
{
NewScanLine = static_cast<Byte*>(newbmp->ScanLine[i]);
for(int j=0;j<100;j++)//width
{
NewScanLine[j] = (Byte)gray[i][j];
//此处写成NewScanLine[j] = gray[i][j];也是一样的效果
}
}
Image1->Picture->Bitmap->Assign(newbmp);
Image1->Refresh();
delete newbmp;
以上程序在我的计算机上运行正常,灰度图非常连续。
顺便提一下,Windows处理8位(以下)的位图均使用调色板映射颜色,所以一定要注意要先定义好位图的调色板。而对于16位或24位或32位的图象,就不是用调色板映射颜色了。如果你没有8位的灰度图,用BCB自带的绘图搞一个就是了。
当然你也可以用自己用API创建Palette了。不过我觉的比较麻烦一点,我也很少用.自由偷懒了^-^。
iec
2002-03-31
打赏
举报
回复
这样的:
如果取BMP的RED GREEN BLUE三中颜色的灰度图象值:如下
int pixelRed[100][100];
int pixelGreen[100][100];
int pixelBlue[100][100
Graphics::TBitmap* bmp1;
Graphics::TBitmap* bmp;
bmp1 = new Graphics::TBitmap;
bmp = new Graphics::TBitmap;
bmp->LoadFromFile("..\\name.bmp");
for(int i=0;i<bmp->Width;i++)
{
for(int j=0;j<bmp->Height;j++)
{
pixelRed[i][j]=(bmp->Canvas->Pixels[i][j])&0xff;
pixelGreen[i][j]=(bmp->Canvas->Pixels[i][j])&0xff00;
pixelGreen[i][j]=pixelBlue[i][j]>>8;
pixelBlue[i][j]=(bmp->Canvas->Pixels[i][j])&0xff0000;
pixelBlue[i][j]=pixelBlue[i][j]>>16;}
}
如果写灰度值到image :
for(int i=0;i<bmp->Width;i++)
{
for(int j=0;j<bmp->Height;j++)
{
bmp1->Canvas->Pixels[i][j]= RGB(pixelRed[i][j],pixelGreen[i][j],pixelBlue[i][j]);
}
}
Image1->Canvas->Draw(0, 0, bmp1);
Refresh();
iec
2002-03-31
打赏
举报
回复
这样的:
如果取BMP的RED GREEN BLUE三中颜色的灰度图象值:如下
int pixelRed[100][100];
int pixelGreen[100][100];
int pixelBlue[100][100
Graphics::TBitmap* bmp1;
Graphics::TBitmap* bmp;
bmp1 = new Graphics::TBitmap;
bmp = new Graphics::TBitmap;
bmp->LoadFromFile("..\\name.bmp");
for(int i=0;i<bmp->Width;i++)
{
for(int j=0;j<bmp->Height;j++)
{
pixelRed[i][j]=(bmp->Canvas->Pixels[i][j])&0xff;
pixelGreen[i][j]=(bmp->Canvas->Pixels[i][j])&0xff00;
pixelGreen[i][j]=pixelBlue[i][j]>>8;
pixelBlue[i][j]=(bmp->Canvas->Pixels[i][j])&0xff0000;
pixelBlue[i][j]=pixelBlue[i][j]>>16;}
}
如果写灰度值到image :
for(int i=0;i<bmp->Width;i++)
{
for(int j=0;j<bmp->Height;j++)
{
bmp1->Canvas->Pixels[i][j]= RGB(pixelRed[i][j],pixelGreen[i][j],pixelBlue[i][j]);
}
}
Image1->Canvas->Draw(0, 0, bmp1);
Refresh();
Jansonlee
2002-03-31
打赏
举报
回复
一生何求:
是否存在数据类型不匹配的问题?在gray数组中存储的是整型(0-255),但在ScanLine中存储的是二进制数据吧。编译没问题,但运行时出错。
hdaq
2002-03-31
打赏
举报
回复
jansonlee(刽子手)
ScanLine 的作用是一次把一整行的像素点扫描下来,对于24位图象它是按R、G、B一个一个按字节存储的,所以你可以在定义gray数组为整型,但一定要保证其范围(0-255),也可以把gray数组定义为Byte类型,我的机器运行非常正常,要不你把gray换成Byte型,再试一试。并把你的错误写出来。
iec(冰冰凉)说的也是一个可行的方法,但一个一个像素赋值将影响运行速度。
hdaq
2002-03-30
打赏
举报
回复
放一个TImage控件Image1
假设你的矩阵是 int gray[100][100];
则:
Byte* ScanLine;
Image1->Picture->Bitmap->Width = 100;
Image1->Picture->Bitmap->Height = 100;
Image1->Picture->Bitmap->PixelFormat = pf24bit;
for(int i = 0; i<Image1->Picture->Bitmap->Height ; i++)
{
ScanLine = static_cast<Byte*>(Image1->Picture->Bitmap->ScanLine[i]);
for(int j = 0 ; j<Image1->Picture->Bitmap->Width; j++)
{
ScanLine[j*3 + 0] = gray[i][j];
ScanLine[j*3 + 1] = gray[i][j];
ScanLine[j*3 + 2] = gray[i][j];
}
}
Image1->Refresh();
Jansonlee
2002-03-30
打赏
举报
回复
期待回答,可以再加分
通过Numpy实现
图像
处理
本课程包括以下主要内容:1
图像
的存储结构介绍。2 读取,
显示
与保存
图像
。3
图像
的灰度图转换。4
图像
的通道提取。5
图像
重复,镜像,旋转等操作。6 通过双线性插值算法,实现
图像
的放大或缩小。7
图像
的卷积计算,实现浮雕效果。
计算
图像
的灰度共生
矩阵
针对一张20*20的
图像
块,编程计算该
图像
块的灰度共生
矩阵
(d=1,θ=0°), 并将原始
图像
块和共生
矩阵
的数值
显示
出来。 理论上灰度共生
矩阵
应该是概率分布
矩阵
,这里的`countMatrix`是计数
矩阵
,`probaMatrix`是概率
矩阵
显然的是,灰度共生
矩阵
的大小取决于*
图像
中
灰度值
的种类*,所以建议`orange = orange - np.mod(orange,25)`来减少
灰度值
种类,共生
矩阵
图像
也更明显
Python计算
图像
纹理-灰度共生
矩阵
基于Python探究灰度共生
矩阵
(GLCM)那点事儿 - 知乎一、什么是灰度共生
矩阵
? 灰度共生
矩阵
(Gray-level co-occurrence matrix;GLCM)和相关的纹理特征计算是
图像
的一种分析技术。给定
一个
图像
,该
图像
由各自具有一定强度(特定灰度级)的像素组成,GLCM
矩阵
在
图像
…https://zhuanlan.zhihu.com/p/367213524 GitHub - 1044197988/Python-Image-feature-extraction: Python实现提取图.
图像
纹理——灰度共生
矩阵
1.灰度共生
矩阵
本文是借用一篇文章的例子讲解灰度共生
矩阵
,用文字说明感觉说不清,自己之前用该方法做过实验,还是会忘,所以干脆用例子的方式介绍,下一次再看也容易理解。 在
图像
中任意一点(x,y)及偏离它的一点(x+a,y+b)(其中a,b为整数,认为定义)构成点对。设该点对的
灰度值
为(f1,f2),假设
图像
的最大灰度级为L,则f1与f2的组合共有L*L种。对于整福
图像
,统计每一种(f1,f2)
图像
的一种处理方式----灰度
矩阵
运算(matlab)
图像
的一种处理方式----灰度
矩阵
运算(matlab) 图片的存储是基于多维
矩阵
的。而灰度
矩阵
运算对应的是
图像
的一种处理方式。 在数字
图像
中,黑白
图像
的像素点的亮度是用0-255的二进制数表示的,称为灰度。灰度
矩阵
就是各个像素点亮度的二进制存储
矩阵
。 以下是灰度
矩阵
的常见运算: (1)观察两个
图像
经灰...
C++ Builder
13,822
社区成员
102,680
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章