Preprocessing Coding Program Pengenalan Peralatan Bengkel Motor .1 Inisialisasi Webcam

C. Cropping static void onMouse int event , int x , int y , int flag , void data { if event = CV_EVENT_LBUTTONDOWN return ; if data == 0 return ; int length = 256; int panel = 200; int margin = 10; int thickness = 23; if length+margin x || x length+panel-margin return ; if margin y || y panel-margin return ; unsigned char temp = 0; if margin = y y = thickness+margin { temp = 67; C } if temp == 0 return ; unsigned char sel; try { sel = static_cast unsigned char data ; } catch ... { return ; } sel = temp; } int TestCroppedStreaming { int idCamera = -1; cek di aplikasi camera index mulai dari 0 config cfg ..\\..\\sample\\dct.xml ; TO_DO: get cameraid idCamera = 1; cv:: VideoCapture vcidCamera; std:: string nameWindow = DCT - CS ; cv::namedWindow nameWindow, cv:: WINDOW_AUTOSIZE ; cv:: Mat frame; cv:: Rect crop0,0 ujung kiri atas , 479, 479; ukuran crop unsigned char key = 0; unsigned char mouse = 0; detection detcfg; cv::setMouseCallback nameWindow, onMouse, static_cast void mouse ; unsigned int i = 0; int length = 256; int panel = 200; int margin = 10; int lenZigzag = 35; int thickness = 23; cv:: Mat canvascv:: Size length+panel, length+thickness+margin, CV_8UC1 , cv:: Scalar 200; Tombol utamacv:: Point length+margin+40, margin+13, C , Deteksi Alat , false ; utama.sudut.emplace_backcv:: Point length+margin, margin; utama.sudut.emplace_backcv:: Point length+panel-margin, margin; utama.sudut.emplace_backcv:: Point length+panel-margin, margin+thickness; utama.sudut.emplace_backcv:: Point length+margin, margin+thickness; Tombol dct256cv:: Point margin2+3, length+margin2+15, 8 , 256 , true ; dct256.sudut.emplace_backcv:: Point margin2, length+margin2; dct256.sudut.emplace_backcv:: Point margin2 + lenZigzag, length+margin2; dct256.sudut.emplace_backcv:: Point margin2 + lenZigzag,length+thickness+margin2; dct256.sudut.emplace_backcv:: Point margin2 , length+thickness+margin2; Tombol dct128cv:: Point margin2+52, length+margin2+15, 7 , 128 , true ; dct128.sudut.emplace_backcv:: Point margin2+50, length+margin2; dct128.sudut.emplace_backcv:: Point margin2+50 + lenZigzag, length+margin2; dct128.sudut.emplace_backcv:: Point margin2+50lenZigzag,length+thickness+margin2; dct128.sudut.emplace_backcv:: Point margin2+50 , length+thickness+margin2; Tombol dct64cv:: Point margin2+108, length+margin2+15, 6 , 64 , true ; dct64.sudut.emplace_backcv:: Point margin2+100, length+margin2; dct64.sudut.emplace_backcv:: Point margin2+100 + lenZigzag, length+margin2; dct64.sudut.emplace_backcv:: Point margin2+100lenZigzag,length+thickness+margin2; dct64.sudut.emplace_backcv:: Point margin2+100 , length+thickness+margin2; Tombol dct32cv:: Point margin2+157, length+margin2+15, 5 , 32 , true ; dct32.sudut.emplace_backcv:: Point margin2+150, length+margin2; dct32.sudut.emplace_backcv:: Point margin2+150 + lenZigzag, length+margin2; dct32.sudut.emplace_backcv:: Point margin2+150lenZigzag,length+thickness+margin2; dct32.sudut.emplace_backcv:: Point margin2+150 , length+thickness+margin2; Tombol dct16cv:: Point margin2+206, length+margin2+15, 4 , 16 , true ; dct16.sudut.emplace_backcv:: Point margin2+200, length+margin2; dct16.sudut.emplace_backcv:: Point margin2+200 + lenZigzag, length+margin2; dct16.sudut.emplace_backcv:: Point margin2+200 +lenZigzag, length+thickness+margin2; dct16.sudut.emplace_backcv:: Point margin2+200 , length+thickness+margin2; Tombol dct8cv:: Point margin2+262, length+margin2+15, 3 , 8 , true ; dct8.sudut.emplace_backcv:: Point margin2+250, length+margin2; dct8.sudut.emplace_backcv:: Point margin2+250 + lenZigzag, length+margin2; dct8.sudut.emplace_backcv:: Point margin2+250 + lenZigzag, length+thickness+margin2; dct8.sudut.emplace_backcv:: Point margin2+250 , length+thickness+margin2; TombolPlus kontrolUi; kontrolUi.tombols.emplace_backutama; kontrolUi.tombols.emplace_backdct256; kontrolUi.tombols.emplace_backdct128; kontrolUi.tombols.emplace_backdct64; kontrolUi.tombols.emplace_backdct32; kontrolUi.tombols.emplace_backdct16; kontrolUi.tombols.emplace_backdct8; cv::setMouseCallback nameWindow, onMouse, static_cast void kontrolUi ; std:: vector cv:: Point blank; blank.emplace_backcv:: Point length+margin, margin+thickness+1; blank.emplace_backcv:: Point length+panel-margin, margin+thickness+1; blank.emplace_backcv:: Point length+panel-margin, length-margin; blank.emplace_backcv:: Point length+margin, length-margin; std:: vector std:: vector cv:: Point blanks; blanks.push_backblank; cv:: Rect viewPort0,0 , length, length; while key = 27 { GambarTombolcanvas, kontrolUi.tombols, key; HWND hwnd = HWND cvGetWindowHandlenameWindow.c_str; key = cv::waitKey50; if hwnd == 0 || IsWindowVisiblehwnd { key = 27; break ; } D. Resizing vc frame; cv:: Mat bin = framecrop; cv::cvtColorbin, bin, CV_RGB2GRAY ; cv::resizebin, bin, cv:: Size length, length; cv:: Mat feed = canvasviewPort; feed.setTocv:: Scalar 0; set item semua cv:: Rect viewSelected0,0 , length, length; feed = canvasviewSelected; bin.copyTofeed; switch kontrolUi.terpilih { case 8 : length = 256; break ; case 7 : length = 128; break ; case 6 : length = 64; break ; case 5 : length = 32; break ; case 4 : length = 16; break ; case 3 : length = 8; break ; case 67: Check key = kontrolUi.terpilih; kontrolUi.terpilih = 1; reset break ; }

4.2.4 Program Ekstraksi Ciri Discrete Cosine Transform

include stdafx.h include dct.h include error.h include iostream namespace dct { int ConvertToDct const cv:: Mat src , cv:: Mat dst { if src .data == 0 return ErrorCode :: ARG_ZERO_SIZED_IMAGE ; if src .rows = src .cols return ErrorCode :: ARG_IMAGE_NOT_SQUARE ; cv:: Mat tmp1, tmp2; src .convertTotmp1, CV_32FC1 , 1.0255; , 1.0255 cv::dcttmp1, tmp2; tmp2.convertTo dst , CV_8UC1 , 255; return 0; } int InverseDct const cv:: Mat src , cv:: Mat dst { if src .data == 0 return ErrorCode :: ARG_ZERO_SIZED_IMAGE ; if src .rows = src .cols return ErrorCode :: ARG_IMAGE_NOT_SQUARE ; cv:: Mat tmp1, tmp2; src .convertTotmp1, CV_32FC1 ; , 1.0255 cv::idcttmp1, tmp2; tmp2.convertTo dst , CV_8UC1 ; return 0; } TO_DO: optimize this const cv:: Mat GenerateDctMatrix unsigned int order { TO_DO: make sure order is the power of 2 cv:: Mat kernel order , order , CV_64F ; double valRow0 = sqrt1.0 static_cast double order ; double alpha = sqrt2.0 static_cast double order ; double denominator = static_cast double 2 order ; for unsigned int j = 0; j order ; j++ { kernel.at double 0, j = valRow0; for unsigned int i = 1; i order ; i++ { double numerator = CV_PI static_cast double i 2j + 1; kernel.at double i, j = alpha cosnumerator denominator; } } return kernel; } int FastDct const cv:: Mat src , cv:: Mat dst { if src .data == 0 return ErrorCode :: ARG_ZERO_SIZED_IMAGE ; if src .rows = src .cols return ErrorCode :: ARG_IMAGE_NOT_SQUARE ; TO_DO: make sure order is the power of 2 cv:: Mat tmp1; src .convertTotmp1, CV_64F ; cv:: Mat kernel = GenerateDctMatrix src .rows; dst = kernel tmp1 kernel.t; return 0; } int FastInverseDct const cv:: Mat src , cv:: Mat dst { if src .data == 0 return ErrorCode :: ARG_ZERO_SIZED_IMAGE ; if src .rows = src .cols return ErrorCode :: ARG_IMAGE_NOT_SQUARE ; if src .type = CV_64F return ErrorCode :: ARG_IMAGE_HAS_INVALID_TYPE ; TO_DO: make sure order is the power of 2 cv:: Mat tmp1; src .convertTotmp1, CV_64F ; cv:: Mat kernel = GenerateDctMatrix src .rows; cv:: Mat tmp2 = kernel.t tmp1 kernel; tmp2.convertTo dst , CV_8U ; return 0; } Zig Zag Scanning int zigzag const cv:: Mat src , cv:: Mat dst { if src .data == 0 return ErrorCode :: ARG_ZERO_SIZED_IMAGE ; if src .rows = src .cols return ErrorCode :: ARG_IMAGE_NOT_SQUARE ; unsigned int size = src .rows; unsigned int totalData = size size; dst = cv:: Mat 1, totalData, src .type; unsigned int i, j, n; for i = n = 0; i size 2; i++ { for j = i size ? 0 : i-size+1; j = i j size; j++ { int idx = i1? jsize-1+i : i-jsize+j; s[idx] = n++; int row = idx size; int col = idx size; dst .at double 0, n++ = src .at double row, col; s[n++] = static_castunsigned intm.atunsigned charrow, col; } } return 0; }

4.2.5 Fungsi Similaritas Kosinus

double CheckSimilarity const cv:: Mat m1 , const cv:: Mat m2 , unsigned int persentase { cv:: Mat z1, z2; unsigned int size; if persentase = 0 || persentase = 100 { pixelscanning m1 , z1; pixelscanning m2 , z2; size = z1.cols; unsigned int size = z1.cols; } else {