Показать полную графическую версию : [решено] подсчитать площадь произвольной фигуры
Surround
06-04-2008, 10:30
подскажите пожалуйста, в помощью чего можно посчитать площадь произвольной криволинейной фигуры, скажем, изображенной на фотке?
Могу предложить такой вариант:
1. В фотошопе обводим фигуру чёрным цветом (и делаем заливку, разумеется).
2. Сохраняем этот чёрный контур в монохромном gif-файле.
3. Используем скрипт:
<html><head>
<meta http-equiv="content-type" content="text/html; charset=windows-1251">
<title>Площадь</title>
<script>
if (window.CanvasRenderingContext2D) {
var ctx;
function init() {
ctx = canv.getContext('2d');
if(!canv.getContext) return;
var img = new Image();
img.onload = function() {
canv.width = img.width;
canv.height = img.height;
ctx.drawImage(this, 0, 0, img.width, img.height);
black = 0;
white = 0;
for (w = 0; w < img.width; w++) {
for (h = 0; h < img.width; h++)
{
if (ctx.getImageData(w,h,1,1).data[0] == 0)
black++;
else
white++;
}
}
alert("Чёрных точек: " + black + "; других: " + white + "; всего: " + (black+white));
}
img.src = "1.gif";
}
}
</script>
</head> <body>
<center>Скрипт считает количество чёрных точек на изображении. Поместите изображение 1.gif в папку со скриптом и нажмите кнопку "Подсчитать". На подсчёт может уйти много времени в зависимости от размеров изображения и производительности компьютера.
<br />
<input type="button" onClick="init();" value="Подсчитать" /><br /><canvas id="canv" width="1" height="1">
Для работы скрипта требуется Firefox 2.
</canvas><br />
</body></html>
Сохраните это в виде html-страницы. Файл 1.gif с фигурой кладём рядышком. Кликаем по кнопочке на странице. Оно считает и выводит количество чёрных и белых пикселей.
Работает только в Firefox'е 2 и, быть может, в Safari, но я не уверен.
Наверняка есть способ считать напрямую по картинке, но мне известен только этот:)
Surround
06-04-2008, 12:51
mrcnn, если б были известны уравнения кривых...
Coutty, попробуем...
Surround
06-04-2008, 13:38
Coutty, да, как под ие там, оперу никак... ток конкретный файрфокс ((
Surround, Firefox поддерживает canvas.getImageData(), Опера и IE - нет. С этим и ограничение.
Можно сделать на другом языке. Пожалуйста - ваше право. Я всего лишь концепт предложил. Который, кстати, работает в FF ;)
Я думал предстоит считать площадь поверхности. Например стены, стола, двери автомобиля, или иной объемной плоскости. (к словам не докапываться, вы поняли о чем речь) А фигура оказалось плоской...
Surround
07-04-2008, 21:25
решил проблему следующим образом:
<?php $file = "1.gif";
$im = @imagecreatefromgif($file);
$w=imagesx($im);
$h=imagesy($im);
$s=0;
for($i=1;$i<=$h;$i++) {
for($j=1;$j<=$w;$j++) {
if (imagecolorat($im, $j, $i)==0) $s++;
}
}
print "number of black px: "; print $s; ?>
а пиксель - это 0.0009см2
а пиксель - это 0.0009см2
это смотря какое разрешение (dpi)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.