Cumartesi, Eylül 29, 2007

OpenCv'ye Giriş 2

İlk yazımızın sonunda bir örnek vermiştik şimdi örneği biraz açıklayalım
Görüntü yükleye bilmek için cvLoadImage fonksiyonunu kullanıyoruz kullanımı gayet basit
IplImage* cvLoadImage( const char* filename, int iscolor=1 )

filename : Görüntü dosyasının ismi
iscolor : 1 ise her piksel 3 bytelık renk değeri içerir RGB yalnız dikkat OpenCv de renk sırası RGB ( Kırmızı-Yeşil-Mavi ) değil BGR ( Mavi-Yeşil-Kırmızı ) dır.
0 ise her piksel 1 bytelık renk -gri ton - degeri içerir
-1 ise okunan görüntü dosyası nasılsa öyle okunur...

bu fonkisyon Görüntü dosyasını hafızaya istendiği gibi IplImage yapısında yükler ve işaretçisini size döndürür. Bu görüntü ile işlem yapmak için bu işaretçiyi kullanılır.

IplImage yapısı şu şekilde tanımlanmıştır

typedef struct _IplImage
{
int nSize;
/* sizeof(IplImage) */
int ID;
/* version (=0)*/
int nChannels;
/* Most of OpenCV functions support 1,2,3 or 4 channels */
int alphaChannel;
/* ignored by OpenCV */
int depth;
/* pixel depth in bits: IPL_DEPTH_8U, IPL_DEPTH_8S, IPL_DEPTH_16U,
IPL_DEPTH_16S, IPL_DEPTH_32S, IPL_DEPTH_32F and
IPL_DEPTH_64F are supported */
char colorModel[4];
/* ignored by OpenCV */
char channelSeq[4];
/* ditto */
int dataOrder;
/* 0 - interleaved color channels, 1 - separate color channels.
cvCreateImage can only create interleaved images */
int origin;
/* 0 - top-left origin,
1 - bottom-left origin (Windows bitmaps style) */
int align;
/* Alignment of image rows (4 or 8).
OpenCV ignores it and uses widthStep instead */
int width;
/* image width in pixels */
int height;
/* image height in pixels */
struct _IplROI *roi;
/* image ROI. when it is not NULL, this specifies image region to process */
struct _IplImage *maskROI;
/* must be NULL in OpenCV */
void *imageId;
/* ditto */
struct _IplTileInfo *tileInfo;
/* ditto */
int imageSize;
/* image data size in bytes
(=image->height*image->widthStep
in case of interleaved data)*/
char *imageData;
/* pointer to aligned image data */
int widthStep;
/* size of aligned image row in bytes */
int BorderMode[4];
/* border completion mode, ignored by OpenCV */
int BorderConst[4];
/* ditto */
char *imageDataOrigin;
/* pointer to a very origin of image data
(not necessarily aligned) -
it is needed for correct image deallocation */
}
IplImage;

şimdilik IplImage'ın her şeyi neymiş diye uğraşmayın kullandıkça öğrenirsiniz.
Görüntüleri saklamak için kullanılan pek çok dosya formatı var. Bunlardan Bu fonksiyonla kullanabilecekleriniz

* Windows bitmaps - BMP, DIB;
* JPEG files - JPEG, JPG, JPE;
* Portable Network Graphics - PNG;
* Portable image format - PBM, PGM, PPM;
* Sun rasters - SR, RAS;
* TIFF files - TIFF, TIF.

Görüntüyle işimiz bittiğinde Hafızadan ayırdığımız yerleri boşaltmamız lazım bu iş için cvReleaseImage fonksiyonunu kullanıyoruz kullanımı gayet basit
void cvReleaseImage( IplImage** image );

dikkat edilmesi gereken bir nokta var elimizde işaretçinin de işaretçisini kullanıyoruz yani örnekteki gibi
cvReleaseImage( &grnt );
Evet Artık Görüntüyü yükledik artık sıra geldi ekranda göstermeye. Bu işi iki adımda yapıyoruz.
önce cvNamedWindow fonsiyonuyla bir pencere açıyoruz ve cvShowImage fonksiyonuyla pencerede görüntüyü gösteriyoruz.

Kullanımlarına gelince
int cvNamedWindow( const char* name, int flags );
name : Pencereye vereceğimiz isim daha sonra bu isimle ulaşılacağından aynı isimli iki pencere olmaz
flags : 1 ise Görüntü gerçek boyutlarında gösterilir
0 ise Görüntü pencere boyutlarında gösterilir

void cvShowImage( const char* name, const CvArr* image );
name : Görüntünün gösterileceği pencerenin ismi
image : Görüntünün işaretçisi

Pencereyle işimiz bittiğinde kapatmak için cvDestroyWindow fonksiyonu kullanılır.
void cvDestroyWindow( const char* name );
name : Kaptılacak pencerenin ismi

Şimdi örnekteki son OpenCv komutuna gelelim cvWaitKey fonksiyonu bir tuşa basıncaya kadar
ve belirtilen bekleme süresi doluncaya kadar program beklemede kalır
int cvWaitKey( int delay=0 );
delay : mili saniye biriminden bekleme süresi

İkinci yazımızın sonuna geldik. Görüş ve istekleriniz olursa bize bildirin dikkate almaya çalışırız. Eksik ve hatalarımız varsa bildirin memnun oluruz.





Cuma, Eylül 28, 2007

OpenCv'ye Giriş 1

Öncelikle OpenCv yi indirip bilgisayarınıza kurun
Windows için bir kurum programıya indirebiliyorsunuz
OpenCv_1.0.exe

OpenCv kütüphanesi normal olarak C: de Program Files kısmına kuruyor kendini

CodeBlocks'u çalıştırın
Create New Project -> Console Applicationı seçin


Projenize bir isim verip devam edin dil seçiminde ben C++ seçiyorum C de kullanabilirsiniz


Evet Artık projemiz oluştu şimdi OpenCv kütüp hanesi için gerekli ayarlamaları yapalım.
Aslında bütün kullanacağınız kütüphaneler için bu yaraların yapılması lazım
Öncelikle Derleyiciye başlık -header - dsyalarını nerede bulacağını gösteriyoruz
Project->Build Options->Search directories -> Compiler
gerekli dizinler gösteriliyor


Ardından Bağlayıcıya -Linker - kütüphaneyi - dosyalarını nerede bulacağını gösteriyoruz
Project->Build Options->Search directories -> Linker
gerekli dizini gösteriyoruz



Project->Build Options->Linker Settings den OpenCv de çoğu işimizi göremize yetecek kütüphane dosyalarını ekliyoruz



Hepsi bu kadar Artık Aşağıdaki Kodu yazın ve derleyip çalıştırın


// OpenCV nin ana fonksiyonlarının tanımlandığı başlık dosyası
#include "cv.h"
// OpenCV nin Kullanıcı ara birimi ile ilgili fonksiyonlarının tanımlandığı başlık
// dosyası
#include "highgui.h"
#include

int main()
{
char Buf[512];
IplImage* grnt;
/* Desteklenen Görüntü formatları
* Windows bitmaps - BMP, DIB;
* JPEG files - JPEG, JPG, JPE;
* Portable Network Graphics - PNG;
* Portable image format - PBM, PGM, PPM;
* Sun rasters - SR, RAS;
* TIFF files - TIFF, TIF.
*/
puts("Goruntu Dosyasini secin :");
gets(Buf);
grnt = cvLoadImage(Buf,1);
if(grnt){
//Yeni Pencere Oluştur
cvNamedWindow("Görüntü", 0);
//Görüntüyü Pencerede Göster
cvShowImage("Görüntü", grnt);
//Bir Tuşa basılmasını Bekle
cvWaitKey(0);
cvDestroyWindow( "Görüntü" ); // Pencereyi Yok et
cvReleaseImage( &grnt ); // Görüntüyü yüklediğimiz alanı serbest bırak
return 0;
}
else{
puts("Goruntu Dosyasini acamiyorum !!! :( ");
cvWaitKey(0);
return -1;
}
}







Delimiyim Ne !

- Bilmem kaçına gelmiş evli barklı işli güçlü hatta işi başından aşkını, oturmuş programlamayla üstelik üzerine bir de yapay zeka ile ilgileniyor. İlgilenmenin yanında oturup örnek programlar hazırlıyor, yazılar yazıyor... Delimidir ne !

- Sen Ne anlarsın bu işlerden hem sana ne bu konularda bilgili pek çok insan var. Eğer lüzüm varsa onlar yazar sana da ne oluyor... Delimisin ne ?

- Zaten çok sınırlı olan boş vakitlerimde böyle şeylerle uğraşmam doğru mu ? Acaba Kıymettar sermaye-i ömrümü bad-ı heva boşamı sarfediyorum ?
Delimiyim Ne ?

Gündüzü beklenen gecelerde
Bir hilal olduk
Doğunca gün
Batalım diye*

Gündüzü beklenen gecelerdeyiz. herkes gibi, herkes kadar gündüzü bekliyoruz.
Hilallerin kimi küskün saklanıyor vermiyor aydınlığını kimi bencil kendine saklıyor...
Hilal olabilmek ne haddimize...
bir yıldız böceğinin ne kadarcık aydınlığı olabilir işte o kadar...
ama kimbilir belkide bu, kimi Hilallerin küskünlüğünü, kimilerinin bencilliğini kaldırır...

Sermayeyi ömrün boşa geçmesi meselesine gelirsek
Efendimiz
“Hayrun Nas Men Yenfeûn Nas” (İnsanların Hayırlısı, İnsanlara Faydalı Olandır)
demiyor mu ?
bu fayda herkesin istidadına göre değil mi ? hem değil mi ki Zindan-ı Atalet** -tembllik zindanı- için deyiz her çalışma bu zindanı biraz da olsa açmıyor mu ?


* Bir şiir olarak aklımda kalmış fakat kimin bilemiyorum
** Münazarattan " Zindan-ı atâlete düştüğümüzün sebebi nedir?" sorusunun cevabına bakınız

Cuma, Eylül 21, 2007

Ramazan 3

Ramazan oruç ayı, Kur'an ayı.
Gündüzleri sıyâm, geceleri kıyâm.
Oruç, açlık için değil, yakınlaşmak için.
Namaz, yorulmak için değil, yakınlaşmak için.
Kur'an, okumuş olmak için değil, yakınlaşmak için.
Sadaka, harcamış olmak için değil, yakınlaşmak için.

Ramazan'ın önce Kur'an, sonra oruç ayı olduğunu bildiren,
bu mubârek ayı aydınlatan muhteşem ayete bakalım:

2:185 şehru ramadân
Ramazan ayı
ellezî unzile fîhil-qur°ân
ki onda Kur'an indirildi
huden linnâsi vebeyyinâtin
insanlara rehber ve apaçık belgeler olarak
minel-hudâ vel-furqân
yol gösterici ve ayırd edici
femen şehide minkumuş-şehra felyesumh
sizden bu aya erişen, onda oruç tutsun
vemen kâne marîdan ev 'alâ seferin
hasta veya yolculukta olan
fe'iddetun min eyyâmin uhar
(tutamadığı günlerin) sayısınca başka günlerde
yurîdullâhu bikumul-yusra
Allah sizin için kolaylık ister
velâ yurîdu bikumul-'usr
sizin için zorluk istemez
velitukmilul-'iddete velitukebbirullâhe
sayıyı tamamlamanızı ve Allah'ı yüceltmenizi ister
'alâ mâ hedâkum vele'allekum teşkurûn
size yol gösterdiğine karşılık; ola ki şükredersiniz.


Ramazan 1 : Ramazan güzeldir
Ramazan 2 : Ramazan-ı Şerife dairdir

Pazartesi, Eylül 10, 2007

cvBlobsLib , Etiketleme ve Fl_OpenCv 0.5



cvBlobsLib yine OpenCv ile yazılmış Etiketleme için kullanabileceğiniz bir kütüphane uzun uzadıya açıklama yazacak durumda değilim. Detaylı bilgi için linklere bakın olmadı sorunuzu
iletin bildiğimiz kadarıyla cevap vermeye çalışırız...

cvBlobsLib kütüphanesinin CodeBlocks için proje dosyasını oluşturup derledim kullanıma hazır
Buyrun cvBlobsLib.zip

cvBlobsLib kullanımını gösteren örnek program Blobs.zip
içinde Fl_OpenCv'nin 0.5 versiyonu var artık video dosyalarınızı da FLTK pencerelerinde gösterebileceksiniz. Örneğini daha sonra ekleyeceğim

Salı, Eylül 04, 2007

Mutluluk yarışı !

Gecenin üçüdür en uygun zaman, bahse girerim
düşünün: sabah çok yakın
oysa ışıltı yok ortalıkta
nerdeyse gece bitmiş
ama sürmekte karanlık

henüz uyanmış bazıları
henüz uyumamış bazıları
bazıları uyanmış uykusuna doymadan
bazıları uykusuna varmadan doymuş
...

En mutlu insanlar belki de
baca temizleyicileridir
öyle dar, öyle karanlık bir yerdedirler ki
yüreklerini geniş, dayanıklı
aydınlık tutmak zorundadırlar
buna yükümlü sayarlar kendilerini.
Baca temizleyicileri başkalarını sevmekle kalmaz
başkalarınca sevilirler aynı zamanda
çünkü herkesi düşünmeyecek kadar mutlu
herkes tarafından düşünülmeyecek kadar mutludurlar.
İsmet Özel- AKLA KARŞI TEZLER

Dökümcülerde baca temizleyicilerinden geri kalmazlar...