[从头学数学] 第15节 认识人民币

在星历2015年的江南行省,[机器小伟]跟随[工程师阿伟]学习认识人民币,通过观察人民币图片并使用特定算法进行像素分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

剧情提要:
[机器小伟]在[工程师阿伟]的陪同下进入练气期二层功法的修炼,

今天要修炼的是[认识人民币]。

正剧开始:

星历2015年12月24日 16:53:11, 银河系厄尔斯星球中华帝国江南行省。

[工程师阿伟]正在和小伟一起观看人民币。













星历2015年12月24日 16:53:47, [机器小伟]说:[阿伟大人],好有趣的章节啊。
16:54:23, 阿伟没有说话,钱这东西,省略上十万字的评价。

本节所用到的代码:

function readPic() {
	//图片
	var image = new Image();
	var width = 600;
	var height = 400;
	var gap = 5;
	var retArray = new Array();
	var R, G, B;	
	var pos;
	var top, bottom, left, right;
	
	image.src = "./1.jpg";
	
	image.onload = function() {
		plot.drawImage(image);
		
		var imagedata = plot.getImageData(0, 0, width, height);	
		var len = imagedata.data.length / 4;

		//四边界
		for (var i = 0; i < width; i++) { //搜margin-left
			for (var j = 0; j < height; j++) {//从顶向下
				pos = j * width + i;
				if (Math.abs(imagedata.data[4*pos] - imagedata.data[0]) <= gap &&
					Math.abs(imagedata.data[4*pos+1] == imagedata.data[1])<=gap &&
					Math.abs(imagedata.data[4*pos+2] == imagedata.data[2])<=gap) {
					//视为背景
					continue;				
				}
				else {
					left = i;
					break;
				}
			}
		}
	
		for (var i = width-1; i > -1; i--) { //搜margin-right
			for (var j = 0; j < height; j++) {//从顶向下
				pos = j * width + i;
				if (Math.abs(imagedata.data[4*pos] - imagedata.data[0]) <= gap &&
					Math.abs(imagedata.data[4*pos+1] == imagedata.data[1])<=gap &&
					Math.abs(imagedata.data[4*pos+2] == imagedata.data[2])<=gap) {
					//视为背景
					continue;				
				}
				else {
					right = i;
					break;
				}
			}
		}

		for (var j = 0; j < height; j++) {//margin-top
				for (var i = 0; i < width; i++) { 
				pos = j * width + i;
				if (Math.abs(imagedata.data[4*pos] - imagedata.data[0]) <= gap &&
					Math.abs(imagedata.data[4*pos+1] == imagedata.data[1])<=gap &&
					Math.abs(imagedata.data[4*pos+2] == imagedata.data[2])<=gap) {
					//视为背景
					continue;				
				}
				else {
					top = j;
					break;
				}
			}
		}
		
		for (var j = height-1; j >-1; j--) {//margin-bottom
			for (var i = 0; i < width; i++) { 
				pos = j * width + i;
				if (Math.abs(imagedata.data[4*pos] - imagedata.data[0]) <= gap &&
					Math.abs(imagedata.data[4*pos+1] == imagedata.data[1])<=gap &&
					Math.abs(imagedata.data[4*pos+2] == imagedata.data[2])<=gap) {
					//视为背景
					continue;				
				}
				else {
					bottom = j;
					break;
				}
			}
		}
		
		//imagedata的数据其实是把图象右上角的象素存在最后的
		//坐标系之间是有差异的,
		var tmp;
		if (top > bottom) {
			tmp = bottom;
			bottom = top;
			top = tmp;
		}
		if (left > right) {
			tmp = left;
			left = right;
			right = tmp;
		}
		
		var range = Math.max(bottom-top, right-left);
		var scale = 1;
		if (range != 0) {
			scale = 100 / range;
		}
		
		var x, y, repeat, count;

		for (var i = top;i < bottom;i+=2) {
			for (var j = left; j < right; j+=2) {
				pos = i * width + j;
				R = imagedata.data[4*pos];
				G = imagedata.data[4*pos+1];
				B = imagedata.data[4*pos+2];
				x = Math.round((j-(left+right)/2) * scale);
				y = Math.round((i-(top+bottom)/2)*scale);			
				
				repeat = 0;
				count = retArray.length;
				for (; repeat < count; repeat++) {
					if (retArray[repeat][0]==x && retArray[repeat][1] == y) {
						break;
					}
				}
				if (repeat >= count) {
					retArray.push([x, y, R, G, B]);	
				}
				
			}
		}

		
		var len2 = retArray.length;
		var info = '';
		
		info += "$picDataArray = [";
		for (var i = 0; i < len2; i++) {
			info += '['
				+retArray[i][0].toFixed(0)+', '
				+retArray[i][1].toFixed(0)+', '
				+retArray[i][2].toFixed(0)+', '
				+retArray[i][3].toFixed(0)+', '
				+retArray[i][4].toFixed(0)+'], ';
		}
		info +='];';
		info += '//len:beg:end'+len.toFixed(0) + ',' 
			+'left:top:right:bottom['+left.toFixed(0)+', '
			+top.toFixed(0)+', '+right.toFixed(0)+', '
			+bottom.toFixed(0)+']';
		document.body.appendChild(document.createTextNode(info));
	}
}

function drawWithColor() {
	var len = $picDataArray.length;
	plot.save();
	setSector(1,1,1,1);
	var s = '';
	var x, y, R, G, B;
	plot.translate(-100, -50);
	plot.scale(4, 4);
	
	
	for (var i =0; i < len; i++) {
		s = '';
		x = $picDataArray[i][0];
		y = $picDataArray[i][1];
		R = $picDataArray[i][2];
		G = $picDataArray[i][3];
		B = $picDataArray[i][4];
		s = s + 'rgba(' + R.toFixed(0)+','+G.toFixed(0)+','+B.toFixed(0)+',1.0)';
		
		plot.setFillStyle(s);
		
		for (var j = 0; j < 30; j++) {
			fillCircle(x+ j* 5, y+j*6, 1);
		}
	
	}


}

本节到此结束,欲知后事如何,请看下回分解。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值