常驻嘉宾
- 积分
- 3939
- 威望
- 3162
- 贡献
- 735
- 兑换币
- 98
- 注册时间
- 2019-3-24
- 在线时间
- 21 小时
|
8#
楼主 |
发表于 2019-4-5 22:25:04
|
只看该作者
以下是控制台C程序,自己模拟了直线数据- #include<stdio.h>
- void main()
- {
- static short int i = 0, j = 0, last = 0, x = 0, y = 0, n = 0;
- unsigned char temp = 0, find = 0, imgbuff_process[600] = { 0 }, img_edg[1200];
- unsigned short int cont = 0, edgposition[60];
- for (int p = 0; p < 60; p++)
- {
- for (int q = 0; q < 10; q++)
- {
- imgbuff_process[p * 10 + q] = 0;
- if (q == 4 || q == 5)
- {
- imgbuff_process[p * 10 + q] = 0xff;
- }
- }
- }
- for (i = 0; i < 60; i++)
- {
- last = 0; //记录上一个点的颜色情况,黑为1,白为0
- x = i * 10; //每一行的开头,从0-590,一共60行
- find = 0; //新的一行,find变为0,若该行中出现跳变,find会一直等于1
- edgposition[i] = 0; // edgposition[60]
- for (j = 0; j < 10; j++) // 每一个点,每一行有十个点
- {
- if (imgbuff_process[x + j] == 0xff) //imgbuff_process[600],判断是否为黑点
- {
- if (last == 0)
- {
- y = j << 3; // 为什么要乘以8(目前还不知道),y是做什么用的?y使用来存储跳变沿的坐标位置(j)
- if (find == 0) // find又是做什么用的?新的一行,find变为0,若该行中出现跳变,find会一直等于1
- {
- edgposition[i] = cont; // cont是什么意思?cont用来记录跳变沿的个数(上升+下降+行数算一个),cont是累加的,当前行记录的是不包括本行的跳变沿个数,最后结果是前59行的跳变沿个数,没有最后一行的跳变沿个数
- }
- img_edg[cont++] = y; //左移动5相当于乘以32 左移动3相当于乘以8 img_edg[1200]
- find = 1;
- }
- last = 1;
- continue;
- }
- if (imgbuff_process[x + j] == 0) //如果为白点
- {
- if (last == 1)
- {
- y = j << 3;
- if (find == 0)
- {
- edgposition[i] = cont;
- }
- img_edg[cont++] = y;
- find = 1;
- }
- last = 0;
- continue;
- }
- for (n = 7; n >= 0; n--)
- {
- temp = (imgbuff_process[x + j] >> n) & 1;// 获取该点像素值 (0或1)
- if (temp != last) //与上一个值不相同 出现了跳变沿
- {
- y = j << 3;
- if (find == 0)
- {
- edgposition[i] = cont;
- }
- img_edg[cont++] = y + 7 - n;
- find = 1;
- }
- last = temp; //存储该点的值
- }
- }
- img_edg[cont++] = 0xff; //0xff代表本行坐标值结束,进入下一行,也存入img_edg;注意这里cont也++
- }
- printf("-----打印imgbuff_process-----\n");
- for (int p = 0; p < 60; p++)
- {
- for (int q = 0; q < 10; q++)
- {
- printf("%d", imgbuff_process[p * 10 + q]);
- }
- printf("\n");
- }
- printf("--------------------\n");
- printf("-----打印img_edg-----\n");
- for (int p = 0; p < 60; p++)
- {
- for (int q = 0; q < 20; q++)
- {
- printf("%5d", img_edg[p * 20 + q]); // 注意此处为p*20
- }
- printf("\n");
- }
- printf("--------------------\n");
- printf("-----打印edgposition-----\n");
- for (int p = 0; p < 60; p++)
- {
- printf("%5d", edgposition[p]);
- }
- printf("\n--------------------\n");
- }
复制代码
|
|