用C程序进行图像分割的方法

代码如下:

#include <stdio.h>
#include <stdlib.h>

#define PICWIDTH 24 /* 原始图片大小:宽*高 */
#define PICHEIGHT 12

#define SLICEWID 4 /* 切割生成的新的小图片的大小:宽*高 */
#define SLICEHEI 3

void display(char *, int, int);

int main(int argc, char **argv)
{
     int width = PICWIDTH;
     int height = PICHEIGHT;
     int A = (int)(width/SLICEWID);
     int B = (int)(height/SLICEHEI);
     char m[PICWIDTH*PICHEIGHT] = ""; /* 存储原来图像的每个象素 */

     char temp[SLICEWID * SLICEHEI]; /* 存储切割生成的小图像的每个象素 */
     char * py;
     int row_flag, line_flag, i, j;
     int indes = 0;
     int t = 0;

     if(PICWIDTH%SLICEWID || PICHEIGHT%SLICEHEI) {
     printf("图像不能被正确分割,请修改设置值!/n原图大小:%d*%d,切图大小:%d*%d/n", PICWIDTH, PICHEIGHT, SLICEWID, SLICEHEI);
     exit(0);
     }
     for(t = 0 ; t < PICWIDTH * PICHEIGHT; t++) m[t] = 65 + t%PICWIDTH + t/PICWIDTH;
     display(m, PICWIDTH, PICHEIGHT);
     py = m;
     for (row_flag = 0; row_flag < B; ++row_flag) {
     for (line_flag = 0; line_flag < A; ++line_flag) {
         for (j = 0; j < SLICEHEI; j++) {
         for (i = 0; i < SLICEWID; i++) {
             t = (((row_flag * SLICEHEI + j) * PICWIDTH) + i + SLICEWID * line_flag);
             py = m + t;
             temp[indes] = *py;
             indes++;
             if (indes >= SLICEWID * SLICEHEI)
             indes = 0;
         }
         }
         display(temp, SLICEWID, SLICEHEI); /* 显示每个分割出来的小图象 */
     }
     }
     return 0;
}

void display(char * s, int w, int h)
{
     int i;
     for(i = 0; i < w * h; i++) {
     if(!(i%w)) printf("/n");
     printf("%c", s[i]);
     }
     printf("/n");
}

这个程序将一个PICWIDTH*PICHEIGHT的大图片分割成SLICEWID*SLICEHEI大小的一些小图片。

如上图所示的背景图片,其实是一些点的集合,总共多少个点呢?PICWIDTH*PICHEIGHT个
在计算机上存储的时候必然把这些点的信息一行一行地保存到文件中。
当我们想要把这个图象用图中的绿、红两条线切割为几块时,其实就是通过一定的算法取出保存在文件中的点的信息,再拼到一个图片中显示出来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值