You are on page 1of 11

PRAKTIKUM 12

IMAGE ARITHMETIC

diajukan guna memenuhi tugas praktikum Pengolahan Citra Digital dengan dosen
pengampu Vita Permatasari ST, MT.

oleh
Bunga Adina Pramesti
NIM G41171752

PROGRAM STUDI D-IV REKAM MEDIK


JURUSAN KESEHATAN
POLITEKNIK NEGERI JEMBER
2019
CONTOH PROGRAM

#include "cv.h"
#include "highgui.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <math.h>
#include <float.h>
#include <limits.h>
#include <time.h>
#include <ctype.h>
#ifdef _EiC
#define WIN32
#endif

static CvMemStorage* storage = 0;


static CvHaarClassifierCascade* cascade = 0;
static CvHaarClassifierCascade* nested_cascade = 0;
void detect_and_draw( IplImage* image );

const char* cascade_name = "haarcascade_frontalface_alt.xml";


double scale = 1;
IplImage* img = 0;

int main()
{
CvCapture* capture = 0;
IplImage *frame, *frame_copy = 0;
IplImage *image = 0;
const char* scale_opt = "--scale=";
int scale_opt_len = (int)strlen(scale_opt);
const char* cascade_opt = "--cascade=";
int cascade_opt_len = (int)strlen(cascade_opt);
int i;
const char* input_name = 0;

cascade = (CvHaarClassifierCascade*)cvLoad(cascade_name, 0, 0, 0);


if (!cascade)
{
fprintf( stderr, "ERROR: Could not load classifier cascade\n");
fprintf( stderr,
"Usage: facedetect [--cascade=\"<cascade_path>\"]\n"
" [--scale[=<image scale>\n");
return -1;
}
storage = cvCreateMemStorage(0);
img=cvLoadImage("D:\\muslima.jpg",3);

detect_and_draw(img);

if( cvWaitKey( 10) >= 0 )


goto cleanup;

cvWaitKey(0);
cleanup:

if( image )
{
detect_and_draw( image );
cvWaitKey(0);
cvReleaseImage( &image );
}
else if ( input_name )
{
FILE* f = fopen( input_name, "rt" );
if ( f )
{
char buf[1000+1];
while( fgets( buf, 100, f ) )
{
int len = (int)strlen(buf), c;
while( len > 0 && isspace(buf[len-1]) )
len --;
buf[len] = '\0';
image = cvLoadImage( buf, 1 );
if ( image )
{
detect_and_draw( image );
c = cvWaitKey (0);
if( c == 27 || c== 'q' || c== 'Q' )
break;
cvReleaseImage( &image );
}
}
fclose(f);
}
}
cvDestroyWindow("result");
return 0;
}

void detect_and_draw( IplImage* img )


{
IplImage *gray, *small_img;
int i, j;

gray = cvCreateImage( cvSize(img->width,img->height), 8 , 1);


small_img = cvCreateImage( cvSize( cvRound (img->width/scale),
cvRound (img->height/scale)),8,1);

cvCvtColor( img, gray, CV_BGR2GRAY );


cvResize( gray, small_img, CV_INTER_LINEAR );
cvEqualizeHist( small_img, small_img );
cvClearMemStorage( storage );

CvSeq* faces = cvHaarDetectObjects( small_img, cascade, storage, 1.1, 2, 0


|CV_HAAR_FIND_BIGGEST_OBJECT
// |CV_HAAR_DO_ROUGH_SEARCH
// |CV_HAAR_DO_CANNY_PRUNING
// |CV_HAAR_SCALE_IMAGE
, cvSize(30, 30) );
for( i = 0; i < (faces ? faces ->total : 0); i++ );
{
CvRect* r = (CvRect*)cvGetSeqElem( faces, i);
cvRectangle( img, cvPoint( r->x, r->y ),
cvPoint( r->x + r->width, r->y + r->height ),
CV_RGB(0,255,0),2,8,0);

CvMat small_img_roi;
CvSeq* nested_objects;
CvPoint center;
int radius;

center.x = cvRound((r->x + r->width*0.5)*scale);


center.y = cvRound((r->y + r->height*0.5)*scale);
radius = cvRound((r->width + r->height)*0.25*scale);
cvCircle (img, cvPoint(center.x,center.y), 2,
cvScalar(0,255,0), 1);
}
cvShowImage( "result", img );
cvReleaseImage( &gray);
cvReleaseImage( &small_img );
}
1. Gunakan 1 foto yang terdiri atas 3 wajah (wajah 1 Nim di atas Anda, wajah Anda, wajah1
Nim di bawah Anda. Dengan posisi berurutan sesuai NIM, NIM kecil di kanan). Wajah
yang terdeteksi harus wajah Anda. Buat program menentukan posisi koordinat titik
tengah wajah yang terdeteksi!

#include "cv.h"
#include "highgui.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <math.h>
#include <float.h>
#include <limits.h>
#include <time.h>
#include <ctype.h>
#ifdef _EiC
#define WIN32
#endif

static CvMemStorage* storage = 0;


static CvHaarClassifierCascade* cascade = 0;
static CvHaarClassifierCascade* nested_cascade = 0;
void detect_and_draw( IplImage* image );

const char* cascade_name = "haarcascade_frontalface_alt.xml";


double scale = 1;
IplImage* img = 0;

int main()
{
CvCapture* capture = 0;
IplImage *frame, *frame_copy = 0;
IplImage *image = 0;
const char* scale_opt = "--scale=";
int scale_opt_len = (int)strlen(scale_opt);
const char* cascade_opt = "--cascade=";
int cascade_opt_len = (int)strlen(cascade_opt);
int i;
const char* input_name = 0;

cascade = (CvHaarClassifierCascade*)cvLoad(cascade_name, 0, 0, 0);


if (!cascade)
{
fprintf( stderr, "ERROR: Could not load classifier cascade\n");
fprintf( stderr,
"Usage: facedetect [--cascade=\"<cascade_path>\"]\n"
" [--scale[=<image scale>\n");
return -1;
}
storage = cvCreateMemStorage(0);
img=cvLoadImage("our.jpg",3);
detect_and_draw(img);

if( cvWaitKey( 10) >= 0 )


goto cleanup;

cvWaitKey(0);
cleanup:

if( image )
{
detect_and_draw( image );
cvWaitKey(0);
cvReleaseImage( &image );
}
else if ( input_name )
{
FILE* f = fopen( input_name, "rt" );
if ( f )
{
char buf[1000+1];
while( fgets( buf, 100, f ) )
{
int len = (int)strlen(buf), c;
while( len > 0 && isspace(buf[len-1]) )
len --;
buf[len] = '\0';
image = cvLoadImage( buf, 1 );
if ( image )
{
detect_and_draw( image );
c = cvWaitKey (0);
if( c == 27 || c== 'q' || c== 'Q' )
break;
cvReleaseImage( &image );
}
}
fclose(f);
}
}
cvDestroyWindow("result");
return 0;
}

void detect_and_draw( IplImage* img )


{
IplImage *gray, *small_img;
int i, j;

gray = cvCreateImage( cvSize(img->width,img->height), 8 , 1);


small_img = cvCreateImage( cvSize( cvRound (img->width/scale),
cvRound (img->height/scale)),8,1);

cvCvtColor( img, gray, CV_BGR2GRAY );


cvResize( gray, small_img, CV_INTER_LINEAR );
cvEqualizeHist( small_img, small_img );
cvClearMemStorage( storage );

CvSeq* faces = cvHaarDetectObjects( small_img, cascade, storage, 1.1, 2, 0


|CV_HAAR_FIND_BIGGEST_OBJECT
// |CV_HAAR_DO_ROUGH_SEARCH
// |CV_HAAR_DO_CANNY_PRUNING
// |CV_HAAR_SCALE_IMAGE
, cvSize(30, 30) );

for( i = 0; i < (faces ? faces ->total : 0); i++ );


{
CvRect* r = (CvRect*)cvGetSeqElem( faces, i);
cvRectangle( img, cvPoint( r->x, r->y ),
cvPoint( r->x + r->width, r->y + r->height ),
CV_RGB(0,255,0),2,8,0);

CvMat small_img_roi;
CvSeq* nested_objects;
CvPoint center;
int radius;

center.x = cvRound((r->x + r->width*0.5)*scale);


center.y = cvRound((r->y + r->height*0.5)*scale);
radius = cvRound((r->width + r->height)*0.25*scale);
cvCircle (img, cvPoint(center.x,center.y), 2,
cvScalar(0,255,0), 1);

printf ("posisi titik tengah (x,y) : %d, %d\n", center.x,center.y);


printf ("lebar dan tinggi wajah (x,y) : %d, %d", r->x, r->y);
}
cvShowImage( "result", img );
cvReleaseImage( &gray);
cvReleaseImage( &small_img );
}
2. Buat program untuk menentukan tingkat kecerahan warna B, G, R pada koordinat tengah
wajah. Tuliskan tingkat kecerahannya!

#include "cv.h"
#include "highgui.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <math.h>
#include <float.h>
#include <limits.h>
#include <time.h>
#include <ctype.h>
#ifdef _EiC
#define WIN32
#endif

static CvMemStorage* storage =0;


static CvHaarClassifierCascade* cascade =0;
static CvHaarClassifierCascade* nested_cascade =0;
void detect_and_draw(IplImage* image);

const char* cascade_name = "haarcascade_frontalface_alt.xml";


double scale = 1;
IplImage* image = 0;

int B,G,R, step, channels, height, width, depth;


uchar *data;

int main()
{
CvCapture*capture= 0;
IplImage *frame, *frame_copy=0;
IplImage *image = 0;
const char* scale_opt = "--scale=";
int scale_opt_len = (int) strlen(scale_opt);
const char* cascade_opt = "--cascade=";
int cascade_opt_len = (int) strlen(cascade_opt);
int i;
const char* input_name=0;

cascade = (CvHaarClassifierCascade*) cvLoad (cascade_name,0,0,0);


if (!cascade)
{
fprintf(stderr, "ERROR : Could not load classifier cascade\n");
fprintf( stderr, "Usage : facedetect [--cascade=\"<cascade_path>\"]\n"
" [--scale[=<image scale>\n");
return -1;
}

storage = cvCreateMemStorage(0);
image=cvLoadImage("our.jpg",3);
height = image->height;
width = image->width;
step = image->widthStep;
channels = image->nChannels;
depth = image->depth;
data = (uchar *)image->imageData;

detect_and_draw(image);

if (cvWaitKey(10)>=0)
goto cleanup;

cvWaitKey(0);
cleanup:

if (image)
{
detect_and_draw(image);
cvWaitKey(0);
cvReleaseImage(&image);

}
else if (input_name)
{

FILE*f = fopen(input_name, "rt");


if (f)
{
char buf [1000 + 1];
while (fgets(buf,1000,f))
{
int len= (int)strlen(buf), c;
while(len>0 && isspace (buf[len-1]) )
len--;
buf[len]='\0';
image =cvLoadImage(buf,1);
if (image)
{
detect_and_draw(image);
c= cvWaitKey(0);
if ( c== 27 || c == 'q' || c =='Q')
break;
cvReleaseImage(&image);
}
}
fclose(f);
}
}

cvDestroyWindow("result");
return 0;

void detect_and_draw( IplImage* img)


{
IplImage *gray, *small_img;
int i,j;
gray = cvCreateImage(cvSize(img->width, img->height), 8, 1);
small_img = cvCreateImage( cvSize(cvRound (img->width/scale),
cvRound (img->height/scale)), 8, 1);

cvCvtColor( img, gray, CV_BGR2GRAY);


cvResize( gray, small_img, CV_INTER_LINEAR);
cvEqualizeHist( small_img, small_img);
cvClearMemStorage( storage );

CvSeq* faces = cvHaarDetectObjects( small_img, cascade, storage, 1.1, 2, 0


|CV_HAAR_FIND_BIGGEST_OBJECT
// |CV_HAAR_DO_ROUGH_SEARCH
// |CV_HAAR_DO_CANNY_PRUNING
// |CV_HAAR_SCALE_IMAGE
, cvSize(30, 30) );

for( i = 0; i < (faces ? faces->total : 0); i++)


{
CvRect* r = (CvRect*)cvGetSeqElem( faces, i);
cvRectangle( img, cvPoint(r->x, r->y ),
cvPoint(r->x + r->width, r->y + r->height),
CV_RGB(0,255,0),2,8,0);

CvMat small_img_roi;
CvSeq* nested_objects;
CvPoint center;
int radius;

center.x = cvRound((r->x + r->width*0.5)*scale);


center.y = cvRound((r->y + r->height*0.5)*scale);
radius = cvRound((r->width + r->height)*0.25*scale);
cvCircle(img, cvPoint(center.x,center.y), 2,
cvScalar(0,255,0), 1);
printf("posisi x dan y = %d, %d\n",center.x, center.y);

B = (data[center.y*step + center.x*channels + 0]);


G = (data[center.y*step + center.x*channels + 1]);
R = (data[center.y*step + center.x*channels + 2]);

printf("BGR = %d, %d, %d",B,G,R);

}
cvShowImage("result", img);
cvReleaseImage( &gray);
cvReleaseImage( &small_img);
}
Tingkat Kecerahan:
//menambah data dari setiap nilai matriks
B = (data[center.y*step + center.x*channels + 0]);
G = (data[center.y*step + center.x*channels + 1]);
R = (data[center.y*step + center.x*channels + 2]);

You might also like