亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? cmv.c

?? 足球機器人自動程序
?? C
字號:
#include <stdio.h>#include <stdlib.h>#include <string.h>#include "cmv.h"static inline int color_c(int n) {	if(!n) return 0;	n &= -n;	int i = 0;	for(; n>>=1; ++i);	return i;}static inline void set_bits(int *p, int x1, int x2, int b) {	if (x1 < 0 || x1 > 255 || x2 < 0 || x2 > 255 || x1 > x2) {		fprintf(stderr, "threshold range error: %d %d\n", x1, x2);		exit(-1);	}	for (; x1<=x2; ++x1) p[x1] |= b;}void cmv_init(struct cmv_data * restrict data, const char * restrict filename) {	FILE *in = fopen(filename, "r");	if (in == NULL) {		perror(filename);		exit(-1);	}	int c;	if (fscanf(in, "%d", &c) != 1) {		fprintf(stderr, "read color_n error\n");		exit(-1);	}	if (c <= 0 || c > INT_BITS) {		fprintf(stderr, "too many colors: %d\n", c);		exit(-1);	}	data->color_n = c;	if ((data->th = malloc(c * 6 * sizeof(int))) == NULL) {		perror("malloc");		exit(-1);	}	memset(data->thresh, 0, sizeof(data->thresh));	int b = 1;	int i;	int *t;	for (i=0; i<c; ++i) {		t = data->th[i];		if (fscanf(in, "%d %d %d %d %d %d", t, t+1, t+2, t+3, t+4, t+5) != 6) {			fprintf(stderr, "read threshold error\n");			exit(-1);		}		set_bits(data->thresh[0], t[0], t[1], b);		set_bits(data->thresh[1], t[2], t[3], b);		set_bits(data->thresh[2], t[4], t[5], b);		b <<= 1;	}	if ((data->remap = malloc(c * sizeof(int))) == NULL) {		perror("malloc");		exit(-1);	}	for (i=0; i<c; ++i) {		if (fscanf(in, "%d", &b) != 1) {			fprintf(stderr, "read remap error\n");			exit(-1);		}		if (b > c || b < 0) {			fprintf(stderr, "invalid remap: %d\n", b);			exit(-1);		}		data->remap[i] = b;	}	if ((data->clist = malloc(c * sizeof(int))) == NULL) {		perror("malloc");		exit(-1);	}	if ((data->cmax = malloc(c * sizeof(struct reg_t *))) == NULL) {		perror("malloc");		exit(-1);	}	if ((data->rgb = malloc((c+1) * 3 * sizeof(int))) == NULL) {		perror("malloc");		exit(-1);	}	if (fscanf(in, "%d", &c) != 1) {		fprintf(stderr, "read rgb_n error\n");		exit(-1);	}	if (c > data->color_n + 1 || c < 0) {		fprintf(stderr, "invalid rgb_n: %d\n", c);		exit(-1);	}	for (i=0; i<c; ++i) {		if (fscanf(in, "%d", &b) != 1) {			fprintf(stderr, "read rgb_i error\n");			exit(-1);		}		if (b > data->color_n || b < 0) {			fprintf(stderr, "rgb_i invalid: %d\n", b);			exit(-1);		}		t = data->rgb[b];		if (fscanf(in, "%d %d %d", t, t+1, t+2) != 3) {			fprintf(stderr, "read rgb error\n");			exit(-1);		}		if (t[0] < 0 || t[0] > 255 || t[1] < 0 || t[1] > 255 || t[2] < 0 || t[2] > 255) {			fprintf(stderr, "rgb invalid\n");			exit(-1);		}	}	if (fscanf(in, "%d", &c) != 1) {		fprintf(stderr, "read size_min error\n");		exit(-1);	}	if (c < 0) {		fprintf(stderr, "size_min invalid: %d\n", c);		exit(-1);	}	data->size_min = c;	if (fscanf(in, "%d", &c) != 1) {		fprintf(stderr, "read max_rle error\n");		exit(-1);	}	if ((data->rle = malloc(c * sizeof(struct rle_t))) == NULL) {		perror("malloc");		exit(-1);	}	data->rle_max = c;	if (fscanf(in, "%d", &c) != 1) {		fprintf(stderr, "read max_reg error\n");		exit(-1);	}	if ((data->reg = malloc(c * sizeof(struct reg_t))) == NULL) {		perror("malloc");		exit(-1);	}	data->reg_max = c;	fclose(in);}static inline void classify(struct cmv_data * restrict data, const unsigned char * restrict py) {	const unsigned char *pu = py + Y_SIZE;	const unsigned char *pv = pu + U_SIZE;	int *m = data->map;	int i, j;	for (j=0; j<H_2; ++j) {		for (i=0; i<W_2; ++i) {			*(m++) = data->remap[color_c(data->thresh[0][*py] & data->thresh[1][*(pu++)] & data->thresh[2][*(pv++)])];			py += 2;		}		*(m++) = -1;		py += W;	}}static inline void encode(struct cmv_data * data) {	struct rle_t *r = data->rle;	int *l = data->map;	int *p = data->map;	int y = 0;	for (;;) {		int *b = p;		int t = *p;		while (*(++p) == t);		if (t == -1) {			l += (W_2 + 1); // next line			r->color = 0;  // change color_end to 0			r->x2 = (W_2 + 1);			++r;			if (++y == H_2) break;		}		else if (t) { // [x1, x2), true 0 is not added			r->color = t;			r->x1 = b - l;			r->x2 = p - l;			r->parent = r;			++r;		}	}	data->rle_end = r;	y = r - data->rle;	if (y > data->rle_max) {		fprintf(stderr, "rle overflow: %d\n", y);		exit(-1);	}}static inline void connect(struct cmv_data * data) {	// l1: first line	// l2: second line	struct rle_t *l1 = data->rle;	struct rle_t *l2 = data->rle;	while ((l2++)->color);	int y = 1;	for (;;) {		if (l1->color == l2->color) {			if (!l1->color) {				if (++y == H_2)  break;			}			else if (l2->x1 >= l1->x1 && l2->x1 < l1->x2) { // safe				l2->parent = l1->parent;			}			else if (l1->x1 >= l2->x1 && l1->x1 < l2->x2) {				if (l1->parent > l2->parent) { // l2->parent is better					((struct rle_t *)(l1->parent))->parent = l2->parent;				}				else if(l1->parent < l2->parent) { // l1->parent is better					((struct rle_t *)(l2->parent))->parent = l1->parent;					l2->parent = l1->parent; // base is important				}			}		}		int t = l2->x2 - l1->x2;		if (t >= 0) ++l1;		if (t <= 0) ++l2;	}	for (l1 = data->rle; l1<data->rle_end; ++l1) {		if (l1->color) {			l1->parent = ((struct rle_t *)(l1->parent))->parent;		}	}}static inline int max(int a, int b) {	return(a > b ? a : b);}static inline int min(int a, int b) {	return(a < b ? a : b);}static inline int sum(int x, int dx) {	x <<= 1;	return(dx * (x + dx - 1) >> 1);}static inline void extract(struct cmv_data * data) {	struct rle_t *r = data->rle;	struct reg_t *g = data->reg;	int y = 0;	for (;;) {		if (r->color) {			if (r->parent == r) {				int t = r->x2 - r->x1;				r->parent = g;				g->color = r->color;				g->x1 = r->x1;				g->x2 = r->x2;				g->size = t;				g->y1 = y;				g->y2 = y;				g->cx = sum(r->x1, t);				g->cy = y * t;				++g;			}			else {				int t = r->x2 - r->x1;				struct reg_t *tg = (struct reg_t *)((struct rle_t *)(r->parent))->parent;				tg->x1 = min(tg->x1, r->x1);				tg->x2 = max(tg->x2, r->x2);				tg->size += t;				tg->y2 = y;				tg->cx += sum(r->x1, t);				tg->cy += y * t;			}		}		else {			if (++y == H_2) break;		}		++r;	}	data->reg_end = g;	y = g - data->reg;	if (y > data->reg_max) {		fprintf(stderr, "reg overflow: %d\n", y);		exit(-1);	}}static inline void separate(struct cmv_data * data) {	memset(data->clist, 0, sizeof(data->color_n * sizeof(int)));	struct reg_t *g = data->reg;	for (; g<data->reg_end; ++g) {		int c = g->size;		if (c > data->size_min) {			g->cx /= c;			g->cy /= c;			c = g->color - 1;			//cmv_ctable[c][cmv_clist[c]] = g;			if (!data->clist[c]) data->cmax[c] = g;			else if (g->size > data->cmax[c]->size) data->cmax[c] = g;			++data->clist[c];		}	}	/*	int i = 0;	for (; i<cdata->color_n; ++i) {		if (cdata->clist[i] > MAX_RPC) {			fprintf(stderr, "rpc overflow: %d\n", cdata->clist[i]);			exit(-1);		}	}	*/}void cmv_process(struct cmv_data * restrict data, const unsigned char * restrict src) {	classify(data, src);	encode(data);	connect(data);	extract(data);	separate(data);}void cmv_reinit(struct cmv_data * restrict data, int ch, int i, int target, int type) {	if (ch < 0 || ch > 2) {		fprintf(stderr, "channel error\n");		exit(-1);	}	i = 1 << i;	if (type) data->thresh[ch][target] |= i;	else data->thresh[ch][target] &= ~i;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产一区二区人妖| 爽爽淫人综合网网站| 有码一区二区三区| 视频一区二区欧美| 国内精品视频一区二区三区八戒| 色综合久久久久综合| 久久影院视频免费| 综合分类小说区另类春色亚洲小说欧美| 日韩影院在线观看| 在线精品观看国产| 久久精品综合网| 国产精品一品视频| 久久精品夜夜夜夜久久| 国产精品私人影院| 成人深夜视频在线观看| 国产精品久久久久国产精品日日 | 国产麻豆精品theporn| 91.成人天堂一区| 亚洲精品成人天堂一二三| 不卡大黄网站免费看| 国产精品毛片大码女人| 九色综合国产一区二区三区| 国产精品美日韩| 久久亚洲二区三区| 91女人视频在线观看| 一区二区成人在线视频| 日本国产一区二区| 国产一区二区福利| 日韩一区精品视频| 欧美精品xxxxbbbb| 99精品视频一区| 久久爱www久久做| 自拍偷拍亚洲欧美日韩| 在线精品视频一区二区三四| 美女视频网站黄色亚洲| 国产精品久久久久毛片软件| 97精品国产97久久久久久久久久久久| 国产欧美久久久精品影院| 日韩欧美国产三级| 制服丝袜日韩国产| 成人黄色777网| 午夜电影网亚洲视频| 欧美一区二区私人影院日本| 成人小视频在线观看| 一区二区在线免费观看| 久久久三级国产网站| 国产婷婷色一区二区三区四区 | 日韩欧美国产1| voyeur盗摄精品| 国产一区二区成人久久免费影院| 亚洲一区在线观看视频| 136国产福利精品导航| 亚洲精品第1页| 亚洲乱码国产乱码精品精98午夜 | 日本女人一区二区三区| 亚洲午夜久久久久中文字幕久| 国产精品国产三级国产普通话99 | 欧美日韩成人综合天天影院 | 国产成人在线电影| 亚洲成人手机在线| 日韩精品一区二区三区蜜臀| 欧美日韩高清影院| 精品国产欧美一区二区| 久久在线免费观看| 亚洲一区二区三区在线| 中文字幕中文乱码欧美一区二区 | 成人免费视频一区| 99久久精品99国产精品| 国产.欧美.日韩| 97精品超碰一区二区三区| 欧美色图在线观看| 日本一区二区成人| 最新国产の精品合集bt伙计| 亚洲综合小说图片| 国产69精品久久久久毛片| 国产在线不卡一卡二卡三卡四卡| 国产原创一区二区| 在线欧美一区二区| 精品久久久久久久人人人人传媒| 精品少妇一区二区三区日产乱码| 久久免费视频色| 欧美变态tickling挠脚心| 国产精品久久久久永久免费观看 | 欧美疯狂性受xxxxx喷水图片| 久久综合99re88久久爱| 免费久久精品视频| 欧美专区亚洲专区| 一区二区在线看| 精品一区二区三区视频在线观看| 91成人国产精品| 久久久国产综合精品女国产盗摄| 亚洲精品网站在线观看| 成人永久aaa| 久久久久亚洲综合| 国内精品国产三级国产a久久| 日韩精品一区二区三区老鸭窝| 亚洲.国产.中文慕字在线| 99国内精品久久| 亚洲第一会所有码转帖| 欧美色偷偷大香| 日本视频在线一区| 欧美精品免费视频| 国产一区日韩二区欧美三区| 久久久一区二区三区捆绑**| 国产成人啪午夜精品网站男同| 久久亚洲精精品中文字幕早川悠里| 久88久久88久久久| 中文字幕一区二区视频| 91在线免费播放| 一区二区在线观看av| 欧美日韩在线直播| 亚洲电影激情视频网站| 欧美日韩亚洲高清一区二区| 蜜桃视频一区二区| 国产精品久久久久影院老司| 色哟哟精品一区| 中文字幕一区二区在线观看| 91精品国产综合久久小美女| 捆绑紧缚一区二区三区视频| 国产精品色一区二区三区| 91视频精品在这里| 日韩成人免费电影| 欧美一区中文字幕| 国模娜娜一区二区三区| 亚洲欧洲精品成人久久奇米网| 欧美日韩一区久久| 国产在线一区二区综合免费视频| 亚洲黄色片在线观看| 日韩视频国产视频| 国产老肥熟一区二区三区| 亚洲免费观看在线视频| 精品欧美乱码久久久久久| 欧美人动与zoxxxx乱| av在线一区二区三区| 高清在线成人网| 激情综合色播激情啊| 亚洲综合色婷婷| 亚洲综合自拍偷拍| 国产精品视频九色porn| 欧美一级生活片| 91丝袜美腿高跟国产极品老师 | 亚洲国产视频在线| 欧美婷婷六月丁香综合色| 91免费精品国自产拍在线不卡| 精品一区二区免费| 日韩电影在线免费观看| 中文字幕一区二区三区不卡| 欧美国产视频在线| 国产精品二三区| 国产精品第13页| 在线播放91灌醉迷j高跟美女 | 久久亚洲精精品中文字幕早川悠里 | 日韩在线a电影| 午夜精品影院在线观看| 亚洲免费观看高清完整版在线观看熊 | 亚洲免费在线电影| 香蕉加勒比综合久久| 男男视频亚洲欧美| 国产91富婆露脸刺激对白| 偷窥少妇高潮呻吟av久久免费| 一区二区三区国产| 亚洲福中文字幕伊人影院| 亚洲精品免费在线| 国产日本欧美一区二区| 一区二区三区国产精品| 日本女优在线视频一区二区| 日本欧美一区二区| 精品一区二区综合| 成人影视亚洲图片在线| 亚洲精品videosex极品| 国产精品久久久久久久岛一牛影视| 99久久精品国产导航| 91麻豆免费观看| 欧美日韩免费观看一区三区| 亚洲国产成人在线| 日本欧美肥老太交大片| 亚洲少妇30p| 亚洲精品日韩专区silk| 国产亚洲精品中文字幕| 日韩欧美国产一区二区在线播放| 在线视频一区二区三区| 97精品国产露脸对白| 97精品国产露脸对白| 久久精品在线观看| 国产精品传媒入口麻豆| 色综合天天性综合| 欧美a一区二区| 亚洲动漫第一页| 26uuu另类欧美亚洲曰本| 国产99久久久国产精品潘金网站| 亚洲乱码国产乱码精品精小说| 91麻豆精品国产自产在线| 国产白丝网站精品污在线入口 | 精品成人一区二区三区四区| 久久午夜老司机| 国产精品三级av| 亚洲第一主播视频| 国产美女主播视频一区| 成人午夜视频在线观看| 在线看国产一区|