永发信息网

如何利用c语言实现像素图形的输出

答案:1  悬赏:10  手机版
解决时间 2021-11-20 12:37
如何利用c语言实现像素图形的输出
最佳答案
1、可以变成灰度图也可以不变。这里假设你的图像都是IPL_DEPTH_8U类型。

2、如果变成灰度图,就是单通道图像,获取的就是每一个像素点的灰度值。
IplImage* img = cvLoadImage("test.bmp", 0);
for (int i = 0; i < img->height; i++)
{
for (int j = 0; j < img->width; j++)
{
//方法一:使用cvGet2D()函数间接访问
CvScalar s = cvGet2D(img, i, j); //其中i代表y轴(第i行),即height;j代表x轴(第j列),即width。
printf("gray value=%f\n",s.val[0]);

//方法二:使用直接访问
uchar val = ((uchar *)(img->imageData + i*img->widthStep))[j]; //i和j的意义同上
printf("gray value=%d\n",val);
}
}

3、如果不变成灰度图,就是3通道图像,获取的就是每一个像素点的BGR值,然后分别获取B值,G值和R值。
IplImage* img = cvLoadImage("test.bmp", 1);
for (int i = 0; i < img->height; i++)
{
for (int j = 0; j < img->width; j++)
{
//方法一:使用cvGet2D()函数间接访问
CvScalar s=cvGet2D(img,i,j); //其中i代表y轴(第i行),即height;j代表x轴(第j列),即width。
printf("B=%f, G=%f, R=%f\n",s.val[0],s.val[1],s.val[2]); //注意是BGR顺序

//方法二:使用直接访问
int bVal = ((uchar *)(img->imageData + i*img->widthStep))[j*img->nChannels + 0]; // B
int gVal = ((uchar *)(img->imageData + i*img->widthStep))[j*img->nChannels + 1]; // G
int rVal = ((uchar *)(img->imageData + i*img->widthStep))[j*img->nChannels + 2]; // R
printf("B=%d, G=%d, R=%d\n",bVal,gVal,rVal); //注意是BGR顺序
}
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
如何用php实现一个账号不能多个用户同时登陆
经文的功德相当于读诵经文一千遍吗
伞架的行号和开口
珍宝玉水晶人生珠宝连锁店怎么去啊,有知道地
到底何为〝书法九势〞,具体怎么解释
The Louvre Museum是什么意思
We have decided to move but are still cons
中国黄金镂空戒指压了一个小坑怎样修复
招远有招商银行吗?
电脑外接3.5寸SATA硬碟无法显示读取
三相六线十二干瓦四级电机接线柜
德国产pz2000摄像机怎样
歙县北站停车场地址在什么地方,我要处理点事
我承包了六十亩地,不知道种什么好。不想种太
有一首歌的歌词中有一句“一起喝奶咖”这首歌
推荐资讯
干花怎么存放
太仓五星级酒店分别有哪些
一种商品的进价为25元,若要获得8%的利润率,
出生率和死亡率降低为何会导致人口老龄化?
天下3全念冰心装备,炼化(非RNB玩家)
黄金价格今天多少一克8月14日
婴儿抚触手法是怎样做的
通州去北京科技馆地铁怎么走,最快最方便的
北京皓睿泽网络科技有限公司怎么样?
宜兴市万石供电所营业厅地址有知道的么?有点
雅芳专卖店(龙津路店)地址在什么地方,想过去
请问E5-2660v2 2.2Hz好吗
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?