<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
<title>Нереальное реально</title>
<link>http://vsreality.com/</link>
<lastBuildDate>Thu, 20 Aug 2009 16:56:03 GMT</lastBuildDate>
<generator>uCoz Web-Service</generator>
<item>
<title>Алгоритм построения карты роботом</title>
<description><![CDATA[<h2><p><span class="Apple-style-span" style="font-weight: normal;"><span class="Apple-style-span" style="font-size: small;">Не знаю можно или нет отнести этот алгоритм построения карты роботом
к векторному. Суть его заключается в том, что робот двигается по
полигону прямыми отрезками встречая препятствие от останавливается тем
самым завершая отрезок, разворачивается на какой либо угол и начинает
вновь свое движение до следующего препятствия. Таким способом он
покрывает отрезками всю территорию полигона.<br startcont="this">
Это видно на рисунки(голубые отрезки и красные точки 1-14)</span></span></p>
<p><img class="alignnone size-full wp-image-21" title="map" src="http://24.47.118.104:7777/blog/wp-content/uploads/2009/07/map3.jpg" mce_src="http://24.47.118.104:7777/blog/wp-content/uploads/2009/07/map3.jpg" alt="map" width="600" height="410"></p>
<p><span class="Apple-style-span" style="font-weight: normal;"><span class="Apple-style-span" style="font-size: small;">После этапа разведки, начинается анализ данных. На этом этапе
находятся точки пересечения отрезков(на рисунке зеленые точки 1' и 2')
Когда все пересечения найдены можно приступать к использованию карты
например для того, что бы перейти из точки 4 в току 9 после применения
алгоритма нахождения кротчайшего пути, робот выберет путь 4-5-2'-9. Не
очень понятно объяснил но думаю вы поймете. Почему точка 2' может быть
использована? Потому что движение робота на отрезках 5-6 и 8-9 свободно
и проверенно. Этот пример похож чем то на железные дороги. Самое
сложное в реализации этого алгоритма это то, что робот всегда должен
точно знать где он находится, хотя это важно и для всех подобных
алгоритмов.</span></span></p></h2>]]></description>
<link>http://vsreality.3dn.ru/blog/2009-08-20-18</link>
<dc:creator>Milk3D</dc:creator>
<guid>http://vsreality.3dn.ru/blog/2009-08-20-18</guid>
<pubDate>Thu, 20 Aug 2009 16:56:03 GMT</pubDate>
</item>
<item>
<title>Подключение библиотек в Microsoft Visual C++ Express edition</title>
<description><![CDATA[<p>Для подключения сторонних библиотек в Microsoft Visual C++ необходимо:<br>
1. Указать папку, где находятся библиотеки<br>
 Сервис-&gt;Пораметры-&gt;Проекты и решения-&gt;Каталоги VC++<br>
В появившейся вкладке в выпадающем списке "Показать каталоги для"
выберите "Файлы библиотек". На экране появится список директорий, где
VC будет искать библиотеки. Добавьте в него вашу директорию или
директории.</p>
<p>2. Указать какие именно библиотеки надо включить в проект.<br>
 Проект-&gt;Свойства-&gt;Свойства конфигурации-&gt;Компоновщик-&gt;Ввод<br>
Добавьте в "Дополнительные зависимости" только имена библиотек которые следует включить в проект.</p>
<p>3. Указать где находятся заголовочные файлы библиотек, т.е. указать
дополнительную директорию в которой VC будет искать файлы подключенные
директивой #include.<br>
 Сервис-&gt;Пораметры-&gt;Проекты и решения-&gt;Каталоги VC++<br>
В появившейся вкладке в выпадающем списке "Показать каталоги для"
выберите "Включаемые файлы". На экране появится список директорий, где
VC будет искать файлы. Добавьте в него вашу директорию или директории.</p>]]></description>
<link>http://vsreality.3dn.ru/blog/2009-08-20-17</link>
<dc:creator>Milk3D</dc:creator>
<guid>http://vsreality.3dn.ru/blog/2009-08-20-17</guid>
<pubDate>Wed, 19 Aug 2009 23:27:00 GMT</pubDate>
</item>
<item>
<title>OpenCV</title>
<description><![CDATA[Компьютерное зрение - это на сегодняшний день целая наука, занимающаяся
обработкой изображений, нахождением на них объектов, распознаванием
образов и многим другим. Она включает в себя элементы других наук таких
как математика, искусственный интеллект и д.р. Она сильно взаимосвязана
с ними, так как зрение и понимание увиденного - это сложный процесс.<br>
На сегодняшний день существует много средств облегчающих разработку
программного обеспечения по этой теме. Одним из таких средств является
OpenCV. В этой библиотеке собрано большое количество методов для работы
с изображениями, и с видео. Скорость выполнения программ написаны с
помощью данной библиотеки очень велика, а так же скорость их
разработки. Не буду описывать все её особенности, о них можно узнать на
многочисленных ресурсах в интернете, просто скажу что я недавно начал с
ней работать и пока она мне очень нравится.]]></description>
<link>http://vsreality.3dn.ru/blog/2009-08-20-16</link>
<dc:creator>Milk3D</dc:creator>
<guid>http://vsreality.3dn.ru/blog/2009-08-20-16</guid>
<pubDate>Wed, 19 Aug 2009 23:23:43 GMT</pubDate>
</item>
<item>
<title>OpenCV - Загрузка картинки</title>
<description><![CDATA[#include "highgui.h"<br>
int main(int argc, char* argv[])<br>
{<br><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;">IplImage* img = cvLoadImage("Image.bmp");<br>cvNamedWindow( "sims.bmp", CV_WINDOW_AUTOSIZE );<br>cvShowImage( "sims.bmp", img );<br>cvWaitKey(0);<br>cvReleaseImage( &amp;img );<br>cvDestroyWindow("Example1");</blockquote>
}]]></description>
<link>http://vsreality.3dn.ru/blog/2009-08-20-15</link>
<dc:creator>Milk3D</dc:creator>
<guid>http://vsreality.3dn.ru/blog/2009-08-20-15</guid>
<pubDate>Wed, 19 Aug 2009 23:21:52 GMT</pubDate>
</item>
<item>
<title>OpenCV - Захват видео с камеры</title>
<description><![CDATA[#include "highgui.h"<br>
int main(int argc, char* argv[])<br>
{<br><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;">cvNamedWindow( "Example2", CV_WINDOW_AUTOSIZE );<br>CvCapture* capture = cvCreateCameraCapture(0);<br>int width = (int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_WIDTH);<br>int height = (int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_HEIGHT);<br>IplImage* frame;<br>while(1){<br></blockquote><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;">frame = cvQueryFrame( capture );<br>if( !frame ) break;<br>cvShowImage( "Example2", frame );<br>char c = cvWaitKey(33);<br>if( c == 27 ) break;</blockquote></blockquote><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;">}<br>cvReleaseCapture( &amp;capture );<br>cvDestroyWindow( "Example2" );</blockquote>
}]]></description>
<link>http://vsreality.3dn.ru/blog/2009-08-20-14</link>
<dc:creator>Milk3D</dc:creator>
<guid>http://vsreality.3dn.ru/blog/2009-08-20-14</guid>
<pubDate>Wed, 19 Aug 2009 23:19:36 GMT</pubDate>
</item>
<item>
<title>OpenCV - Работа с отдельными пикселями</title>
<description><![CDATA[IplImage* img = cvLoadImage("image.jpg");<br>
 for( int y=0; y<img->height; y++ ) {<br></img-><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;">uchar* ptr = (uchar*)(img-&gt;imageData + y * img-&gt;widthStep);<br>for( int x=0; x<img->width; x++ ) {</img-><br></blockquote><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;">if(ptr[3*x]+20&gt;=ptr[3*x+1]||ptr[3*x+2]+20&gt;=ptr[3*x+1]){<br></blockquote></blockquote><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;">ptr[3*x] = 0;<br>ptr[3*x+1] = 0;<br>ptr[3*x+2] = 0;</blockquote></blockquote></blockquote><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;">}</blockquote></blockquote><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;">}</blockquote><img-><img->
 }</img-></img->]]></description>
<link>http://vsreality.3dn.ru/blog/2009-08-20-13</link>
<dc:creator>Milk3D</dc:creator>
<guid>http://vsreality.3dn.ru/blog/2009-08-20-13</guid>
<pubDate>Wed, 19 Aug 2009 23:15:47 GMT</pubDate>
</item>
<item>
<title>Алгоритм закрашивания</title>
<description><![CDATA[<p>Алгоритм закрашивания очень часто используется в компьютерной графике для закрашивания фигур имеющих границы. Так же этот алгоритм может иметь и другое применение например его можно использовать для нахождения центра масс тела по его изображению. Приведу два алгоритма один рекурсивный, а второй линейный. Рекурсивный имеет один недостаток, его нельзя использовать для закрашивания больших фигур так как при большом количестве элементов происходит переполнение стека. Код использует OpenCV для работы с изображениями, но при желании их можно переписать под что угодно.</p>
<p>1. Рекурсивный алгоритм</p><p><br>
<code>
void zakrashivanie(uchar** ptr,int x, int y){<br></code></p><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><span class="Apple-style-span" style="font-family: -webkit-monospace; ">if(ptr[y][3*x]==255){</span><br></blockquote><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><span class="Apple-style-span" style="font-family: -webkit-monospace; ">//Закраска (x, y) пикселя</span><br><span class="Apple-style-span" style="font-family: -webkit-monospace; ">ptr[y][3*x] = 0;</span><br><span class="Apple-style-span" style="font-family: -webkit-monospace; ">ptr[y][3*x+1] = 255;</span><br><span class="Apple-style-span" style="font-family: -webkit-monospace; ">ptr[y][3*x+2] = 0;</span><br><span class="Apple-style-span" style="font-family: -webkit-monospace; ">zakrashivanie(ptr,x-1,y);</span><br><span class="Apple-style-span" style="font-family: -webkit-monospace; ">zakrashivanie(ptr,x+1,y);</span><br><span class="Apple-style-span" style="font-family: -webkit-monospace; ">zakrashivanie(ptr,x,y-1);</span><br><span class="Apple-style-span" style="font-family: -webkit-monospace; ">zakrashivanie(ptr,x,y+1);</span></blockquote></blockquote><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><span class="Apple-style-span" style="font-family: -webkit-monospace; ">}</span></blockquote><code>
</code><p><code>
}
</code>
</p>
<p>2. Волновой алгоритм</p><p><br>
void NearPix(uchar** ptr,int x, int y, int *numStack, CvPoint *Stack){<br></p><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;">if(ptr[y][3*x]==255){<br></blockquote><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;">ptr[y][3*x] = 0;<br>ptr[y][3*x+1] = 255;<br>ptr[y][3*x+2] = 0;<br>Stack[*numStack].x=x;<br>Stack[*numStack].y=y;<br>(*numStack)++;</blockquote></blockquote><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;">}</blockquote><p>
}</p>
<p>void OneStep(uchar** ptr, int *numSrc, int *numDest, CvPoint *Src, CvPoint *Dest){<br></p><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;">int x,y,i;<br>*numDest=0;<br>for(i=0; i&lt;*numSrc;i++){<br></blockquote><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;">x=Src[i].x;<br>y=Src[i].y;<br>NearPix(ptr,x+1,y,numDest,Dest);<br>NearPix(ptr,x-1,y,numDest,Dest);<br>NearPix(ptr,x,y+1,numDest,Dest);<br>NearPix(ptr,x,y-1,numDest,Dest);</blockquote></blockquote><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;">}</blockquote><p>
}</p>
<p>void WaveFill(uchar** ptr,int xst, int yst){<br></p><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;">int numA, numB;<br>CvPoint *stackA, *stackB;<br>stackA=new CvPoint[10000];<br>stackB=new CvPoint[10000];<br>numA=1;<br>stackA[0].x=xst;<br>stackA[0].y=yst;<br>numB=0;<br>while(1){<br></blockquote><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;">if(numA&gt;0)OneStep(ptr,&amp;numA,&amp;numB,stackA,stackB);<br>else break;<br>if(numB&gt;0)OneStep(ptr,&amp;numB,&amp;numA,stackB,stackA);<br>else break;</blockquote></blockquote><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;">}<br>delete [] stackB;<br>delete [] stackA;</blockquote>
<p>
}</p>]]></description>
<link>http://vsreality.3dn.ru/blog/2009-08-20-12</link>
<dc:creator>Milk3D</dc:creator>
<guid>http://vsreality.3dn.ru/blog/2009-08-20-12</guid>
<pubDate>Wed, 19 Aug 2009 22:26:21 GMT</pubDate>
</item>

</channel>
</rss>
