OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7906|回复: 9

求助:获取像素数组中某个点值的函数怎么写?

[复制链接]

8

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
174
金钱
174
注册时间
2022-1-9
在线时间
43 小时
发表于 2023-2-20 16:24:10 | 显示全部楼层 |阅读模式
10金钱
while(1){
                        T = 0.5 * (m1 + m2);
                        m1 = 0.0;
                        m2 = 0.0;
                        m1_num = 0;
                        m2_num = 0;

                        for (i = 0; i < len; i++){
                                if (GetImageData[i] <= T){
                                                m1 += GetImageData[i];
                                                m1_num++;
                                        }
                                else{
                                                m2 += GetImageData[i];
                                                m2_num++;
                                                }
//                                GetImageData+=1;
//                                DataNum++;
                        }
                        if (m1_num != 0)
                                        m1 /= m1_num;
                        if (m2_num != 0)
                                        m2 /= m2_num;
                        if(fabs(T-(0.5*(m1 + m2)))<delt_t)
                                break;
        }
        GetImageData-=DataNum;
        for(j=0;j<len;j++)
        {
                if(GetImageData[j]<=T)
                        GetImageData[j]=0x00;
                else
                        GetImageData[j]=0xFF;       


这是个二值化的代码
想问问各位大佬GetImageData函数应该怎么写啊?

最佳答案

查看完整内容[请看2#楼]

GetImageData[]这个数组里存的就是图像的像素,估计是8位灰度值。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

12

主题

3344

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8462
金钱
8462
注册时间
2020-5-11
在线时间
3904 小时
发表于 2023-2-20 16:24:11 | 显示全部楼层
本帖最后由 LcwSwust 于 2023-2-23 09:24 编辑

GetImageData[]这个数组里存的就是图像的像素,估计是8位灰度值。
专治疑难杂症
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2023-2-21 01:46:49 | 显示全部楼层
你这一顿代码, 到底做啥用?你的图片在哪里?
回复

使用道具 举报

8

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
174
金钱
174
注册时间
2022-1-9
在线时间
43 小时
 楼主| 发表于 2023-2-21 11:17:26 | 显示全部楼层
原子哥:这是一个图像二值化的代码,基本内容如下:

基本全局阈值处理方法

为全局阈值T选择一个初始的估计值

用T分割图像,产生两组像素:G1由大于T的像素组成,G2由小于T的像素组成

对G1和G2的像素分别计算平均灰度值m1和m2

计算新的阈值T = 1/2 * (m1 + m2)

重复步骤2-4,直到连续迭代中的T值差小于一个预定义的参数ΔT

原文链接:https://blog.csdn.net/weixin_42567529/article/details/119182187




我用图像取模软件把图片变成数组显示在LCD屏上,不知道程序中的GetImageData获取图像像素函数怎么写
回复

使用道具 举报

8

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
174
金钱
174
注册时间
2022-1-9
在线时间
43 小时
 楼主| 发表于 2023-2-23 17:12:27 | 显示全部楼层
LcwSwust 发表于 2023-2-23 09:21
GetImageData[]这个数组里存的就是图像的像素,估计是8位灰度值。

如果我用图像取模软件将图像转化为数组,这个GetImageData[]就是那个数组吧
回复

使用道具 举报

12

主题

3344

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8462
金钱
8462
注册时间
2020-5-11
在线时间
3904 小时
发表于 2023-2-24 09:06:36 | 显示全部楼层
18700827839 发表于 2023-2-23 17:12
如果我用图像取模软件将图像转化为数组,这个GetImageData[]就是那个数组吧

是的         
专治疑难杂症
回复

使用道具 举报

8

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
174
金钱
174
注册时间
2022-1-9
在线时间
43 小时
 楼主| 发表于 2023-3-1 20:19:10 | 显示全部楼层

老哥,我问下你懂不懂图像高斯滤波或者Sobel边缘提取这块的代码啊?
回复

使用道具 举报

12

主题

3344

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8462
金钱
8462
注册时间
2020-5-11
在线时间
3904 小时
发表于 2023-3-2 09:22:47 | 显示全部楼层
18700827839 发表于 2023-3-1 20:19
老哥,我问下你懂不懂图像高斯滤波或者Sobel边缘提取这块的代码啊?

不太懂,自己瞎写的代码。
http://www.openedv.com/forum.php?mod=viewthread&tid=341993
专治疑难杂症
回复

使用道具 举报

8

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
174
金钱
174
注册时间
2022-1-9
在线时间
43 小时
 楼主| 发表于 2023-3-2 16:27:05 | 显示全部楼层
LcwSwust 发表于 2023-3-2 09:22
不太懂,自己瞎写的代码。
http://www.openedv.com/forum.php?mod=viewthread&tid=341993

老哥,这里有一段高斯滤波的代码,我想把它用到我的程序中。
我的程序目前已经显示了一幅240*320的二值图像,我想问问下面这个for语句中的width和height在我的程序中需要定义为240和320呢


for(i=widthG+1;i<((heightG-1)*widthG)-2;i++)
        {
                        temp=(0.094*ImageNowg[i-widthG-1]+0.118*ImageNowg[i-widthG]+0.094*ImageNowg[i-widthG+1]
                +0.118*ImageNowg[i-1]+0.147*ImageNowg+0.118*ImageNowg[i+1]+0.094*ImageNowg[i+widthG-1]
                +0.118*ImageNowg[i+widthG]+0.094*ImageNowg[i+widthG+1]);
                       
                        gerytemp=(u8)temp;
        }
        for(j=widthG+1;j<((heightG-1)*widthG)-2;j++)
        {
               
                        if(gerytemp[j]>150)
                        {
                                        gerytemp[j]=255;       
                        }
                        ImageNowg[j]=gerytemp[j];
                       
        }
回复

使用道具 举报

12

主题

3344

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8462
金钱
8462
注册时间
2020-5-11
在线时间
3904 小时
发表于 2023-3-2 16:38:08 | 显示全部楼层
本帖最后由 LcwSwust 于 2023-3-2 16:40 编辑
18700827839 发表于 2023-3-2 16:27
老哥,这里有一段高斯滤波的代码,我想把它用到我的程序中。
我的程序目前已经显示了一幅240*320的二值 ...

是的,注意240、320到底哪个是宽度、哪个是高度。
发代码时要点击工具栏的尖括号<>插入代码,否则显示不全。
程序中的浮点运算可能比较费时间,可以用整数代替,比如:0.5*A+0.5*B 可等效于 (A+B)/2。
专治疑难杂症
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-24 17:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表