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.





1 yorum:

Adsız dedi ki...

merhaba ben ders3.c yi indirdim ama icinde
uchar ve -> gibi c de daha once gormedigim seyler var bu gerçekten bi c kodu mu ve
rgb değerlerini char a atmak icin ne yapmam gerektigi konusunda yardimci olur musunuz tesekkurler