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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? cmv.c~

?? 足球機(jī)器人自動(dòng)程序
?? C~
字號(hào):
#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;}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91蝌蚪porny九色| 国产成人在线免费| 欧美理论片在线| 日韩电影在线免费观看| 91麻豆精品国产91久久久久 | 国产婷婷色一区二区三区四区| 麻豆成人久久精品二区三区红| 欧美一级欧美三级在线观看| 免费成人在线播放| 久久亚洲综合色| 99久久夜色精品国产网站| 亚洲乱码国产乱码精品精可以看 | 国产日韩一级二级三级| 丁香天五香天堂综合| 国产精品久久久久天堂| 色综合天天性综合| 午夜精品在线看| 欧美成人a视频| 成人动漫一区二区| 亚洲电影第三页| 精品国产青草久久久久福利| 成人教育av在线| 亚洲va欧美va人人爽| 26uuu成人网一区二区三区| av高清久久久| 日韩二区在线观看| 国产精品麻豆视频| 欧美日韩免费一区二区三区| 精品一区二区国语对白| 国产精品久久久久永久免费观看| 777亚洲妇女| 国产一区二三区| 亚洲一级片在线观看| 337p粉嫩大胆噜噜噜噜噜91av| 色欧美片视频在线观看在线视频| 蜜桃av噜噜一区| 亚洲专区一二三| 欧美国产日韩精品免费观看| 欧美日韩激情在线| av电影天堂一区二区在线 | 日本三级亚洲精品| 中文字幕一区日韩精品欧美| 宅男在线国产精品| 91国偷自产一区二区三区观看| 激情都市一区二区| 午夜精品一区二区三区三上悠亚| 亚洲国产高清不卡| wwwwxxxxx欧美| 欧美老人xxxx18| 在线精品国精品国产尤物884a| 粉嫩av一区二区三区| 精品亚洲aⅴ乱码一区二区三区| 亚洲精品自拍动漫在线| 中文字幕电影一区| 久久综合色鬼综合色| 欧美一区二区人人喊爽| 欧美日韩久久不卡| 欧美在线一区二区三区| 97久久超碰国产精品电影| 经典三级一区二区| 麻豆成人久久精品二区三区小说| 亚洲成人av中文| 亚洲一区视频在线| 一区二区三区美女视频| 中文字幕制服丝袜一区二区三区| 久久精品在这里| 久久亚洲精华国产精华液| 日韩精品资源二区在线| 欧美一区二区三区婷婷月色| 欧美无人高清视频在线观看| 97久久超碰国产精品| gogogo免费视频观看亚洲一| 国产伦精品一区二区三区免费迷| 久久精品国产99国产精品| 日本不卡中文字幕| 奇米精品一区二区三区四区| 蜜臀av一区二区| 欧美a级一区二区| 美女看a上一区| 久久国产精品露脸对白| 久久国内精品视频| 精品一区二区三区不卡| 日本91福利区| 毛片av一区二区三区| 狠狠色狠狠色综合| 国产精品一区在线观看你懂的| 国产精品1024久久| 99久久精品国产精品久久| 成人深夜在线观看| 色综合中文综合网| 久久久精品黄色| 国产午夜一区二区三区| 久久综合久色欧美综合狠狠| 久久久综合视频| 国产精品蜜臀av| 亚洲一区二区三区四区在线免费观看 | 欧美三级日韩三级国产三级| 欧美日韩电影在线播放| 日韩三级高清在线| 2023国产精品自拍| 中文字幕中文字幕一区二区| 亚洲欧美激情在线| 水野朝阳av一区二区三区| 看片的网站亚洲| 国产美女久久久久| av一区二区三区在线| 在线视频亚洲一区| 日韩一级欧美一级| 国产嫩草影院久久久久| 亚洲欧洲国产专区| 午夜国产不卡在线观看视频| 久久99精品国产麻豆婷婷洗澡| 国产黄色精品网站| 色综合久久九月婷婷色综合| 欧美日韩成人综合天天影院| 久久综合九色综合欧美就去吻| 亚洲乱码国产乱码精品精小说| 奇米777欧美一区二区| 成人av在线资源网| 欧美一区二区三区免费大片| 国产精品视频第一区| 天天做天天摸天天爽国产一区| 国产高清不卡一区二区| 欧美日韩在线一区二区| 中文字幕av不卡| 蜜桃av一区二区| 色av成人天堂桃色av| 欧美精品一区二区三区在线 | 国产日产欧美一区二区视频| 一区二区三区在线观看网站| 国模一区二区三区白浆| 在线日韩av片| 欧美激情中文字幕| 美女视频免费一区| 在线观看免费亚洲| 国产精品久久综合| 日本视频一区二区| 在线一区二区三区| 亚洲欧洲精品一区二区三区 | 日韩极品在线观看| 色综合天天综合在线视频| 久久亚洲精品国产精品紫薇| 日本欧美一区二区三区乱码| 在线一区二区视频| 亚洲视频资源在线| 成人激情视频网站| 久久亚洲欧美国产精品乐播| 免费成人在线观看视频| 欧美日韩一区三区四区| 亚洲精品日韩综合观看成人91| 成人自拍视频在线| 久久久亚洲综合| 国产自产2019最新不卡| 日韩精品一区二区三区视频在线观看| 亚洲国产综合人成综合网站| 91蝌蚪国产九色| 亚洲免费电影在线| 色婷婷综合久久久久中文| 国产精品激情偷乱一区二区∴| 国产不卡高清在线观看视频| 26uuu亚洲| 国产伦精品一区二区三区免费 | 亚洲欧美日韩小说| 91麻豆免费视频| 亚洲欧洲精品成人久久奇米网| 粉嫩av一区二区三区粉嫩| 日本一区二区免费在线| 国产成人精品1024| 337p日本欧洲亚洲大胆色噜噜| 精品一区二区三区在线播放 | 欧美一区二区视频在线观看2022| 日韩毛片高清在线播放| 99热这里都是精品| 亚洲欧美影音先锋| 91偷拍与自偷拍精品| 亚洲另类在线一区| 欧美性三三影院| 午夜欧美电影在线观看| 91精品蜜臀在线一区尤物| 蜜臀av一区二区三区| 久久久久成人黄色影片| 国产成人精品网址| 国产精品久久久久久久久动漫| 91免费国产在线观看| 亚洲影视在线播放| 日韩亚洲欧美在线观看| 国产精品99久久久久久有的能看| 国产精品人成在线观看免费| 日本精品视频一区二区| 日韩福利电影在线| 国产欧美日本一区视频| 一本一道波多野结衣一区二区| 午夜精品一区二区三区电影天堂| 精品黑人一区二区三区久久| 成人av电影在线观看| 亚洲一区二区三区激情| 欧美mv日韩mv| 色婷婷综合久色| 极品美女销魂一区二区三区| 国产精品久久久久四虎|