#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
#include <stdio.h>
#include "vapiTypes.h"
#include "vapiAux.h"
#include "vapiString.h"
#include "vapiImages.h"
#include "vapiImagesAux.h"
#include "vapiOptions.h"
#include "vapi.h"
#include "vapiCameraAcquisition.h"
#include "vapiOperationsDefault.h"
#include "vapiGtkMemory.h"
#include "vapiResult.h"
#include "vapiOperationOptions.h"
#include "vapiCameraSettings.h"
#include "vapiIOCom.h"
#include <process.h>
#include <stdlib.h>
#include "vapiGtkAuxWindow.h"
Diagrama de dependências de inclusão para vapiOperationsDefault.c:
Ir para o código fonte deste ficheiro.
Funções | |
void | vapiApplyOperation (vImages *Images, vEffect *Operation, vOptions *Options, vMacroResult *PreviousResult) |
Executa uma operação. | |
void | vapiBinarizar (vImages *Images, vOptions *options, vMacroResult *PreviousResult) |
void | vapiCanny (vImages *Images, vOptions *options, vMacroResult *PreviousResult) |
void | vapiColourFilter (vImages *Images, vOptions *options, vMacroResult *PreviousResult) |
void | vapiCompareFloat (vImages *Images, vOptions *options, vMacroResult *PreviousResult) |
void | vapiCompareInt (vImages *Images, vOptions *options, vMacroResult *PreviousResult) |
void | vapiCountObjects (vImages *Images, vOptions *options, vMacroResult *PreviousResult) |
void | vapiDilate (vImages *Images, vOptions *options, vMacroResult *PreviousResult) |
void | vapiEndExecution (vImages *Images, vOptions *options, vMacroResult *PreviousResult) |
void | vapiEraseIsolatedPixels (vImages *Images, vOptions *options, vMacroResult *PreviousResult) |
void | vapiErode (vImages *Images, vOptions *options, vMacroResult *PreviousResult) |
void | vapiFlip (vImages *Images, vOptions *options, vMacroResult *PreviousResult) |
void | vapiGeometricCenter (vImages *Images, vOptions *options, vMacroResult *PreviousResult) |
void | vapiGrayscale (vImages *Images, vOptions *options, vMacroResult *PreviousResult) |
void | vapiJumpToConditional (vImages *Images, vOptions *options, vMacroResult *PreviousResult) |
void | vapiLaplace (vImages *Images, vOptions *options, vMacroResult *PreviousResult) |
void | vapiMarkPoints (vImages *Images, vOptions *options, vMacroResult *PreviousResult) |
void | vapiNot (vImages *Images, vOptions *options, vMacroResult *PreviousResult) |
void | vapiObjectExists (vImages *Images, vOptions *options, vMacroResult *PreviousResult) |
void | vapiOCR (vImages *Images, vOptions *options, vMacroResult *PreviousResult) |
void | vapiResultResetInts (vImages *Images, vOptions *options, vMacroResult *PreviousResult) |
void | vapiResultResetPoints (vImages *Images, vOptions *options, vMacroResult *PreviousResult) |
void | vapiSelectRegion (vImages *Images, vOptions *options, vMacroResult *PreviousResult) |
void | vapiSmooth (vImages *Images, vOptions *options, vMacroResult *PreviousResult) |
void | vapiSobel (vImages *Images, vOptions *options, vMacroResult *PreviousResult) |
void | vapiTemplateMatch (vImages *Images, vOptions *options, vMacroResult *PreviousResult) |
void | vapiTeste (vImages *Images, vOptions *options, vMacroResult *PreviousResult) |
void | vapiThreshold (vImages *Images, vOptions *options, vMacroResult *PreviousResult) |
Função para efectuar a binarização. |
void vapiApplyOperation | ( | vImages * | Images, | |
vEffect * | Operation, | |||
vOptions * | Options, | |||
vMacroResult * | PreviousResult | |||
) |
Executa uma operação.
Images | estrtura de imagens. | |
Operation | Operação a executar. | |
Options | Opções para a operação. | |
PreviousResult | Estrutura de Resultados. |
Opções e verificações a executar préviamente.
Se a Operação suporta repetição própria Interna
Definido na linha 42 do ficheiro vapiOperationsDefault.c.
Referências _vOptions::CustomOptions, _vEffect::func, _vEffect::name, _vEffect::OptionsSettings, v_debug e vapiCheckOptOriginal().
Referenciado por vapiApplyMacro(), vapiApplyMacroUntil(), vapiGtkMacroSelectNext() e vapiGtkOperationApply().
00044 { 00045 int i; 00049 vapiCheckOptOriginal (Images, Options); 00050 00051 v_debug ("ApplyOperation: %s", Operation->name); 00052 00056 if (((vEffectSettings *) Operation->OptionsSettings-> 00057 CustomOptionsSettings)->repeatInside) 00058 { 00059 Operation->func (Images, Options, PreviousResult); 00060 return; 00061 } 00062 00063 for (i = 0; 00064 i < ((vEffectOptions *) Options->CustomOptions)->times; i++) 00065 { 00066 Operation->func (Images, Options, PreviousResult); 00067 } 00068 00069 00070 }
Grafo de chamadas desta função:
Here is the caller graph for this function:
void vapiBinarizar | ( | vImages * | Images, | |
vOptions * | options, | |||
vMacroResult * | PreviousResult | |||
) |
Definido na linha 132 do ficheiro vapiOperationsDefault.c.
Referências vapiGrayscale() e vapiThreshold().
Referenciado por vapiAvailableEfects().
00134 { 00135 00136 /* 00137 * Primeiro, mete-se em escala de cinzentos 00138 */ 00139 vapiGrayscale (Images, options, NULL); 00140 /* 00141 * Depois binariza-se 00142 */ 00143 00144 vapiThreshold (Images, options, NULL); 00145 00146 }
Grafo de chamadas desta função:
Here is the caller graph for this function:
void vapiCanny | ( | vImages * | Images, | |
vOptions * | options, | |||
vMacroResult * | PreviousResult | |||
) |
Função para detecção de arestas
Definido na linha 277 do ficheiro vapiOperationsDefault.c.
Referências vapiImagesCheckChannels().
Referenciado por vapiAvailableEfects().
00279 { 00280 if (!vapiImagesCheckChannels (Images, 1)) 00281 return; 00282 00283 /* 00284 * FIXME: Énecessário poder definir na interface os parâmetros da função. 00285 */ 00286 cvCanny (Images->Actual, Images->Actual, 50, 105, 3); 00287 00288 }
Grafo de chamadas desta função:
Here is the caller graph for this function:
void vapiColourFilter | ( | vImages * | Images, | |
vOptions * | options, | |||
vMacroResult * | PreviousResult | |||
) |
Definido na linha 324 do ficheiro vapiOperationsDefault.c.
Referências v_debug, vapiImagesCheckChannels(), vapiImagesSameSize(), vapiImagesSetActual() e vapiOptionsGetFloats().
Referenciado por vapiAvailableEfects().
00326 { 00327 IplImage *tempImage, *imagesHSV[3], *resultHSV[3], *finalMask; 00328 int width, height; 00329 00330 double HUEMAX, HUEMIN, VALUEMIN, VALUEMAX, SATMIN, SATMAX; 00331 00332 if (!vapiImagesCheckChannels (Images, 3)) 00333 { 00334 return; 00335 } 00336 00337 /* 00338 * Colocar os valores de HSV de um modo mais utilizável. 00339 */ 00340 HUEMIN = vapiOptionsGetFloats (options, 0); 00341 HUEMAX = vapiOptionsGetFloats (options, 1); 00342 SATMIN = vapiOptionsGetFloats (options, 2); 00343 SATMAX = vapiOptionsGetFloats (options, 3); 00344 VALUEMIN = vapiOptionsGetFloats (options, 4); 00345 VALUEMAX = vapiOptionsGetFloats (options, 5); 00346 00347 v_debug ("HUEMIN %f, HUEMAX %f", HUEMIN, HUEMAX); 00348 00349 /* 00350 * Converter da escala normalizada 0...1 para 0..180 e 00351 * deslocamento de escala. 00352 */ 00353 /* 00354 * cvInRange faz < MAX, o que significa que quando max =1, 00355 * ele deita fora resultados; 00356 */ 00357 00358 HUEMAX = HUEMAX * 180 + 1; 00359 00360 HUEMIN = HUEMIN * 180; 00361 00362 SATMAX = SATMAX * 255 + 1; 00363 SATMIN = SATMIN * 255; 00364 VALUEMIN = VALUEMIN * 255; 00365 VALUEMAX = VALUEMAX * 255 + 1; 00366 00367 v_debug ("HUEMIN %f, HUEMAX %f", HUEMIN, HUEMAX); 00368 00369 /* 00370 * Criar Imagens Temporárias. 00371 * tempImage : conversão de RGB para HSV. 00372 * imagesHSV : array de imagens, uma para cada canal, H S V . 00373 */ 00374 tempImage = vapiImagesSameSize (Images->Actual, 3); 00375 imagesHSV[0] = vapiImagesSameSize (Images->Actual, 1); 00376 imagesHSV[1] = vapiImagesSameSize (Images->Actual, 1); 00377 imagesHSV[2] = vapiImagesSameSize (Images->Actual, 1); 00378 resultHSV[0] = vapiImagesSameSize (Images->Actual, 1); 00379 resultHSV[1] = vapiImagesSameSize (Images->Actual, 1); 00380 resultHSV[2] = vapiImagesSameSize (Images->Actual, 1); 00381 finalMask = vapiImagesSameSize (Images->Actual, 1); 00382 00383 00384 00385 00386 /* 00387 * Converter a imagem para HSV. 00388 * 00389 */ 00390 cvCvtColor (Images->Actual, tempImage, CV_RGB2HSV); 00391 cvSplit (tempImage, imagesHSV[0], imagesHSV[1], imagesHSV[2], NULL); 00392 00393 /* 00394 * tempImage já não é necessária para o processamento, servirá 00395 * agora para guardar a mascara de filtragem. 00396 */ 00397 00398 cvReleaseImage (&tempImage); 00399 tempImage = vapiImagesSameSize (Images->Actual, 3); 00400 00401 /* 00402 * Ciclo de filtro; 00403 */ 00404 width = Images->Actual->width; 00405 height = Images->Actual->height; 00406 00407 cvInRangeS (imagesHSV[0], cvScalarAll (HUEMIN), cvScalarAll (HUEMAX), 00408 resultHSV[0]); 00409 cvInRangeS (imagesHSV[1], cvScalarAll (SATMIN), cvScalarAll (SATMAX), 00410 resultHSV[1]); 00411 cvInRangeS (imagesHSV[2], cvScalarAll (VALUEMIN), 00412 cvScalarAll (VALUEMAX), resultHSV[2]); 00413 cvAnd (resultHSV[0], resultHSV[1], finalMask, resultHSV[2]); 00414 00415 /* 00416 * Copiar a imagem baseada na máscara. 00417 */ 00418 cvReleaseImage (&imagesHSV[0]); 00419 cvReleaseImage (&imagesHSV[1]); 00420 cvReleaseImage (&imagesHSV[2]); 00421 cvReleaseImage (&resultHSV[0]); 00422 cvReleaseImage (&resultHSV[1]); 00423 cvReleaseImage (&resultHSV[2]); 00424 /* 00425 * Cópia da imagem actual. 00426 */ 00427 cvCopy (Images->Actual, tempImage, finalMask); 00428 vapiImagesSetActual (Images, tempImage); 00429 cvReleaseImage (&finalMask); 00430 }
Grafo de chamadas desta função:
Here is the caller graph for this function:
void vapiCompareFloat | ( | vImages * | Images, | |
vOptions * | options, | |||
vMacroResult * | PreviousResult | |||
) |
Definido na linha 694 do ficheiro vapiOperationsDefault.c.
Referências _vMacroResult::Decision, _vMacroResult::floatsNumber, vapiOptionsGetChoices(), vapiOptionsGetFloats(), vapiOptionsGetInts(), vapiResultGetFloat(), vFALSE e vTRUE.
Referenciado por vapiAvailableEfects().
00696 { 00697 double result, testValue; 00698 if (PreviousResult->floatsNumber == 0) 00699 { 00700 return; 00701 } 00702 result = vapiResultGetFloat (PreviousResult, 00703 vapiOptionsGetInts (options, 0)); 00704 testValue = vapiOptionsGetFloats (options, 0); 00705 switch (vapiOptionsGetChoices (options, 0)) 00706 { 00707 case 0: 00708 { 00709 if (result > testValue) 00710 { 00711 PreviousResult->Decision = vTRUE; 00712 } 00713 else 00714 { 00715 PreviousResult->Decision = vFALSE; 00716 } 00717 break; 00718 } 00719 case 1: 00720 { 00721 if (result >= testValue) 00722 { 00723 PreviousResult->Decision = vTRUE; 00724 } 00725 else 00726 { 00727 PreviousResult->Decision = vFALSE; 00728 } 00729 break; 00730 } 00731 case 2: 00732 { 00733 if (result == testValue) 00734 { 00735 PreviousResult->Decision = vTRUE; 00736 } 00737 else 00738 { 00739 PreviousResult->Decision = vFALSE; 00740 } 00741 break; 00742 } 00743 case 3: 00744 { 00745 if (result <= testValue) 00746 { 00747 PreviousResult->Decision = vTRUE; 00748 } 00749 else 00750 { 00751 PreviousResult->Decision = vFALSE; 00752 } 00753 break; 00754 } 00755 case 4: 00756 { 00757 if (result < testValue) 00758 { 00759 PreviousResult->Decision = vTRUE; 00760 } 00761 else 00762 { 00763 PreviousResult->Decision = vFALSE; 00764 } 00765 break; 00766 } 00767 case 5: 00768 { 00769 if (result != testValue) 00770 { 00771 PreviousResult->Decision = vTRUE; 00772 } 00773 else 00774 { 00775 PreviousResult->Decision = vFALSE; 00776 } 00777 break; 00778 } 00779 } 00780 }
Grafo de chamadas desta função:
Here is the caller graph for this function:
void vapiCompareInt | ( | vImages * | Images, | |
vOptions * | options, | |||
vMacroResult * | PreviousResult | |||
) |
Definido na linha 605 do ficheiro vapiOperationsDefault.c.
Referências _vMacroResult::Decision, _vMacroResult::intsNumber, vapiOptionsGetChoices(), vapiOptionsGetInts(), vapiResultGetInt(), vFALSE e vTRUE.
00607 { 00608 int result, testValue; 00609 if (PreviousResult->intsNumber == 0) 00610 { 00611 return; 00612 } 00613 result = vapiResultGetInt (PreviousResult, 00614 vapiOptionsGetInts (options, 0)); 00615 00616 testValue = vapiOptionsGetInts (options, 1); 00617 switch (vapiOptionsGetChoices (options, 0)) 00618 { 00619 case 0: 00620 { 00621 if (result > testValue) 00622 { 00623 PreviousResult->Decision = vTRUE; 00624 } 00625 else 00626 { 00627 PreviousResult->Decision = vFALSE; 00628 } 00629 break; 00630 } 00631 case 1: 00632 { 00633 if (result >= testValue) 00634 { 00635 PreviousResult->Decision = vTRUE; 00636 } 00637 else 00638 { 00639 PreviousResult->Decision = vFALSE; 00640 } 00641 break; 00642 } 00643 case 2: 00644 { 00645 if (result == testValue) 00646 { 00647 PreviousResult->Decision = vTRUE; 00648 } 00649 else 00650 { 00651 PreviousResult->Decision = vFALSE; 00652 } 00653 break; 00654 } 00655 case 3: 00656 { 00657 if (result <= testValue) 00658 { 00659 PreviousResult->Decision = vTRUE; 00660 } 00661 else 00662 { 00663 PreviousResult->Decision = vFALSE; 00664 } 00665 break; 00666 } 00667 case 4: 00668 { 00669 if (result < testValue) 00670 { 00671 PreviousResult->Decision = vTRUE; 00672 } 00673 else 00674 { 00675 PreviousResult->Decision = vFALSE; 00676 } 00677 break; 00678 } 00679 case 5: 00680 { 00681 if (result != testValue) 00682 { 00683 PreviousResult->Decision = vTRUE; 00684 } 00685 else 00686 { 00687 PreviousResult->Decision = vFALSE; 00688 } 00689 break; 00690 } 00691 } 00692 }
Grafo de chamadas desta função:
void vapiCountObjects | ( | vImages * | Images, | |
vOptions * | options, | |||
vMacroResult * | PreviousResult | |||
) |
Definido na linha 516 do ficheiro vapiOperationsDefault.c.
Referências _vImages::Actual, _vMacroResult::pointsNumber, vapiGeometricCenter(), vapiImagesCheckChannels(), vapiOptionsGetBooleans() e vImagesInit().
Referenciado por vapiAvailableEfects().
00518 { 00519 int line, column, objectCount = 0; 00520 CvScalar pixelValue, NewValue; 00521 CvConnectedComp comp_tmp; 00522 int connectivity_tmp = 4, new = 255; 00523 int flags_tmp = connectivity_tmp + (new << 8); 00524 IplImage *tempImage; 00525 vImages *tempImages = vImagesInit (); 00526 00527 NewValue = cvScalarAll (0); 00528 tempImage = cvCloneImage (Images->Actual); 00529 tempImages->Actual = cvCloneImage (Images->Actual); 00530 00531 if (!vapiImagesCheckChannels (Images, 1)) 00532 { 00533 return; 00534 } 00535 for (line = 0; line < Images->Actual->height; line++) 00536 { 00537 for (column = 0; column < Images->Actual->width; column++) 00538 { 00539 pixelValue = cvGet2D (tempImage, line, column); 00540 if (pixelValue.val[0] == 255) 00541 { 00542 objectCount++; 00543 cvCopy (tempImage, tempImages->Actual, NULL); 00544 cvFloodFill (tempImage, 00545 cvPoint (column, line), NewValue, 00546 cvScalarAll (20), 00547 cvScalarAll (20), &comp_tmp, 00548 flags_tmp, NULL); 00549 00550 cvSub (tempImages->Actual, tempImage, 00551 tempImages->Actual, NULL); 00558 if (vapiOptionsGetBooleans (options, 0) 00559 && PreviousResult->pointsNumber < 00560 (tempImages->Actual->width * 00561 tempImages->Actual->height * 0.03)) 00562 { 00563 vapiGeometricCenter (tempImages, NULL, 00564 PreviousResult); 00565 } 00566 } 00567 00568 } 00569 } 00570 vImagesFreeActual (tempImages); 00571 free (tempImages); 00572 cvReleaseImage (&tempImage); 00573 vapiResultAddInt (PreviousResult, objectCount); 00574 }
Grafo de chamadas desta função:
Here is the caller graph for this function:
void vapiDilate | ( | vImages * | Images, | |
vOptions * | options, | |||
vMacroResult * | PreviousResult | |||
) |
Definido na linha 312 do ficheiro vapiOperationsDefault.c.
Referências vapiImagesCheckChannels() e vapiOptionsGetTimes().
Referenciado por vapiAvailableEfects().
00314 { 00315 if (!vapiImagesCheckChannels (Images, 1)) 00316 return; 00317 00318 cvDilate (Images->Actual, Images->Actual, NULL, 00319 vapiOptionsGetTimes (options)); 00320 00321 }
Grafo de chamadas desta função:
Here is the caller graph for this function:
void vapiEndExecution | ( | vImages * | Images, | |
vOptions * | options, | |||
vMacroResult * | PreviousResult | |||
) |
Definido na linha 508 do ficheiro vapiOperationsDefault.c.
Referências vapiResultSetEnd().
Referenciado por vapiAvailableEfects().
00510 { 00511 vapiResultSetEnd (PreviousResult); 00512 00513 }
Grafo de chamadas desta função:
Here is the caller graph for this function:
void vapiEraseIsolatedPixels | ( | vImages * | Images, | |
vOptions * | options, | |||
vMacroResult * | PreviousResult | |||
) |
Definido na linha 956 do ficheiro vapiOperationsDefault.c.
Referências vapiImagesCheckChannels() e vapiImagesSameSize().
Referenciado por vapiAvailableEfects().
00958 { 00959 double Filter[] = { 00960 -0.1, -0.1, -0.1, -0.1, 0.8, -0.1, -0.1, -0.1, -0.1 00961 }; 00962 CvMat kernel = cvMat (3, 3, CV_32F, Filter); 00963 IplImage *mask, *filterResult; 00964 00965 if (!vapiImagesCheckChannels (Images, 1)) 00966 { 00967 return; 00968 } 00969 mask = vapiImagesSameSize (Images->Actual, 1); 00970 filterResult = vapiImagesSameSize (Images->Actual, 1); 00971 00972 cvFilter2D (Images->Actual, filterResult, &kernel, cvPoint (-1, -1)); 00973 00974 /* 00975 * Existe um limite maximo de 255, para o valor na imagem. 00976 * por exemplo, 8*255 ultrapassaria esse valor, ficando = 255, 00977 * Decidiu-se então utilizar os pesos divididos por 10, 00978 * em que o áximo é 204. 00979 */ 00980 cvInRangeS (filterResult, cvScalarAll (204), cvScalarAll (205), mask); 00981 00982 cvSub (Images->Actual, mask, Images->Actual, NULL); 00983 00984 cvReleaseImage (&mask); 00985 cvReleaseImage (&filterResult); 00986 00987 00988 }
Grafo de chamadas desta função:
Here is the caller graph for this function:
void vapiErode | ( | vImages * | Images, | |
vOptions * | options, | |||
vMacroResult * | PreviousResult | |||
) |
Definido na linha 295 do ficheiro vapiOperationsDefault.c.
Referências vapiImagesCheckChannels() e vapiOptionsGetTimes().
Referenciado por vapiAvailableEfects().
00297 { 00298 if (!vapiImagesCheckChannels (Images, 1)) 00299 { 00300 return; 00301 } 00302 00303 cvErode (Images->Actual, Images->Actual, NULL, 00304 vapiOptionsGetTimes (options)); 00305 00306 }
Grafo de chamadas desta função:
Here is the caller graph for this function:
void vapiFlip | ( | vImages * | Images, | |
vOptions * | options, | |||
vMacroResult * | PreviousResult | |||
) |
Definido na linha 208 do ficheiro vapiOperationsDefault.c.
Referências _vImages::Actual, vapiImagesSameSize() e vapiOptionsGetInts().
Referenciado por vapiAvailableEfects().
00209 { 00210 IplImage *tempImage; 00211 00212 tempImage = vapiImagesSameSize (Images->Actual, 0); 00213 00214 cvFlip (Images->Actual, tempImage, vapiOptionsGetInts (options, 0)); 00215 00216 cvCopy (tempImage, Images->Actual, NULL); 00217 00218 cvReleaseImage (&tempImage); 00219 00220 00221 }
Grafo de chamadas desta função:
Here is the caller graph for this function:
void vapiGeometricCenter | ( | vImages * | Images, | |
vOptions * | options, | |||
vMacroResult * | PreviousResult | |||
) |
Definido na linha 433 do ficheiro vapiOperationsDefault.c.
Referências vapiImagesCheckChannels().
Referenciado por vapiAvailableEfects() e vapiCountObjects().
00435 { 00436 int linha, coluna, somaC = 0, somaL = 0, n = 0; 00437 CvScalar pixelValue; 00438 00439 00440 if (!vapiImagesCheckChannels (Images, 1)) 00441 { 00442 return; 00443 } 00444 if (!(cvCountNonZero (Images->Actual) > 0)) 00445 { 00446 return; 00447 } 00448 00449 for (coluna = 0; coluna < Images->Actual->width; coluna++) 00450 { 00451 for (linha = 0; linha < Images->Actual->height; linha++) 00452 { 00453 pixelValue = cvGet2D (Images->Actual, linha, coluna); 00454 00455 if (pixelValue.val[0]) 00456 { 00457 somaC += coluna; 00458 somaL += linha; 00459 n++; 00460 } 00461 } 00462 00463 } 00464 coluna = somaC / n; 00465 linha = somaL / n; 00466 00467 vapiResultAddPoint (PreviousResult, coluna, linha); 00468 }
Grafo de chamadas desta função:
Here is the caller graph for this function:
void vapiGrayscale | ( | vImages * | Images, | |
vOptions * | options, | |||
vMacroResult * | PreviousResult | |||
) |
Definido na linha 90 do ficheiro vapiOperationsDefault.c.
Referências vapiImagesCheckChannels(), vapiImagesSameSize() e vapiImagesSetActual().
Referenciado por vapiAvailableEfects() e vapiBinarizar().
00092 { 00093 IplImage *tempImage; 00094 00095 00096 /* 00097 * Caso o numero de canais seja diferente de 3, 00098 * ou já é grayscale ou não é RGB. 00099 */ 00100 if (!vapiImagesCheckChannels (Images, 3)) 00101 return; 00102 00103 /* 00104 * cria-se então uma imagem temporária com apenas 1 canal 00105 */ 00106 00107 tempImage = vapiImagesSameSize (Images->Actual, 1); 00108 00109 /* Transformar a imagem em grayscale */ 00110 cvCvtColor (Images->Actual, tempImage, CV_RGB2GRAY); 00111 00112 /* 00113 * Recria-se a imagem Actual, em branco 00114 */ 00115 vapiImagesSetActual (Images, vapiImagesSameSize (tempImage, 1)); 00116 00117 /* 00118 * Copia-se a Imagem temporária para a Actual 00119 */ 00120 cvCopy (tempImage, Images->Actual, NULL); 00121 00122 cvReleaseImage (&tempImage); 00123 }
Grafo de chamadas desta função:
Here is the caller graph for this function:
void vapiJumpToConditional | ( | vImages * | Images, | |
vOptions * | options, | |||
vMacroResult * | PreviousResult | |||
) |
Definido na linha 493 do ficheiro vapiOperationsDefault.c.
Referências vapiOptionsGetInts(), vapiResultGetDecision() e vapiResultSetJumpTo().
Referenciado por vapiAvailableEfects().
00495 { 00496 if (vapiResultGetDecision (PreviousResult)) 00497 { 00498 vapiResultSetJumpTo (PreviousResult, 00499 vapiOptionsGetInts (options, 0)); 00500 } 00501 else 00502 { 00503 vapiResultSetJumpTo (PreviousResult, 00504 vapiOptionsGetInts (options, 1)); 00505 } 00506 }
Grafo de chamadas desta função:
Here is the caller graph for this function:
void vapiLaplace | ( | vImages * | Images, | |
vOptions * | options, | |||
vMacroResult * | PreviousResult | |||
) |
Definido na linha 252 do ficheiro vapiOperationsDefault.c.
Referências vapiCheckOptOriginal(), vapiImagesCheckChannels() e vapiImagesSameSize16().
Referenciado por vapiAvailableEfects().
00254 { 00255 IplImage *tempImage; 00256 00257 if (!vapiImagesCheckChannels (Images, 1)) 00258 return; 00259 00260 vapiCheckOptOriginal (Images, options); 00261 00262 tempImage = vapiImagesSameSize16 (Images->Actual, 0); 00263 00264 cvLaplace (Images->Actual, tempImage, 3); 00265 00266 cvConvertScaleAbs (tempImage, Images->Actual, 1, 0); 00267 00268 cvReleaseImage (&tempImage); 00269 00270 00271 }
Grafo de chamadas desta função:
Here is the caller graph for this function:
void vapiMarkPoints | ( | vImages * | Images, | |
vOptions * | options, | |||
vMacroResult * | PreviousResult | |||
) |
Definido na linha 577 do ficheiro vapiOperationsDefault.c.
Referências _vImages::Actual, vapiImagesDrawCross(), vapiOptionsGetInts(), vapiResultGetPoint() e vapiResultGetPointsNumber().
Referenciado por vapiAvailableEfects().
00579 { 00580 vPoint workPoint; 00581 int i, color[3] = { vapiOptionsGetInts (options, 0), 00582 vapiOptionsGetInts (options, 1), vapiOptionsGetInts (options, 00583 2) 00584 }; 00585 int PointsNumber; 00586 PointsNumber = vapiResultGetPointsNumber (PreviousResult); 00587 if (!(PointsNumber > 0)) 00588 { 00589 return; 00590 } 00591 00592 for (i = 0; i < PointsNumber; i++) 00593 { 00594 workPoint = vapiResultGetPoint (PreviousResult, i); 00595 00596 vapiImagesDrawCross (Images->Actual, workPoint.y, 00597 workPoint.x, vapiOptionsGetInts (options, 00598 3), 2, 00599 color); 00600 00601 } 00602 }
Grafo de chamadas desta função:
Here is the caller graph for this function:
void vapiNot | ( | vImages * | Images, | |
vOptions * | options, | |||
vMacroResult * | PreviousResult | |||
) |
Definido na linha 991 do ficheiro vapiOperationsDefault.c.
Referências vapiImagesCheckChannels(), vapiImagesSameSize() e vapiImagesSetActual().
00992 { 00993 IplImage *finalImage; 00994 if (!vapiImagesCheckChannels (Images, 1)) 00995 { 00996 return; 00997 } 00998 00999 finalImage = vapiImagesSameSize (Images->Actual, 1); 01000 01001 cvNot (Images->Actual, finalImage); 01002 01003 vapiImagesSetActual (Images, finalImage); 01004 01005 01006 }
Grafo de chamadas desta função:
void vapiObjectExists | ( | vImages * | Images, | |
vOptions * | options, | |||
vMacroResult * | PreviousResult | |||
) |
Definido na linha 474 do ficheiro vapiOperationsDefault.c.
Referências vapiImagesCheckChannels(), vapiResultSetDecision(), vFALSE e vTRUE.
Referenciado por vapiAvailableEfects().
00476 { 00477 if (!vapiImagesCheckChannels (Images, 1)) 00478 { 00479 return; 00480 } 00481 00482 if (cvCountNonZero (Images->Actual) > 0) 00483 { 00484 vapiResultSetDecision (PreviousResult, vTRUE); 00485 } 00486 else 00487 { 00488 vapiResultSetDecision (PreviousResult, vFALSE); 00489 } 00490 }
Grafo de chamadas desta função:
Here is the caller graph for this function:
void vapiOCR | ( | vImages * | Images, | |
vOptions * | options, | |||
vMacroResult * | PreviousResult | |||
) |
Definido na linha 853 do ficheiro vapiOperationsDefault.c.
Referências v_info(), vapiImagesCheckChannels() e vapiResultAddChar().
Referenciado por vapiAvailableEfects().
00854 { 00855 FILE *resultFile; 00856 char textFromImage[200]; 00857 /* 00858 * O tesseract apenas suporta ficheiros de 1 canal. 00859 */ 00860 if (!vapiImagesCheckChannels (Images, 1)) 00861 { 00862 return; 00863 } 00864 00865 cvSaveImage ("temp1.tif", Images->Actual); 00866 v_info ("existe o temp1"); 00867 #ifndef VAPI_OS_LINUX 00868 system ("bin\\tesseract\\tesseract.exe temp1.tif vapiOCR batch"); 00869 #else 00870 system ("tesseract temp1.tif vapiOCR batch"); 00871 #endif 00872 00873 resultFile = fopen ("vapiOCR.txt", "r"); 00874 00875 fscanf (resultFile, "%s", textFromImage); 00876 v_info ("lido: %s", textFromImage); 00877 00878 vapiResultAddChar (PreviousResult, textFromImage); 00879 00880 00881 fclose (resultFile); 00882 /* 00883 * Eliminar os ficheiros criados. 00884 */ 00885 vapiResultAddChar (PreviousResult, textFromImage); 00886 unlink ("temp1.tif"); 00887 unlink ("vapiOCR.txt"); 00888 unlink ("vapiOCR.map"); 00889 unlink ("vapiOCR.raw"); 00890 00891 }
Grafo de chamadas desta função:
Here is the caller graph for this function:
void vapiResultResetInts | ( | vImages * | Images, | |
vOptions * | options, | |||
vMacroResult * | PreviousResult | |||
) |
Definido na linha 1016 do ficheiro vapiOperationsDefault.c.
Referências vResultResetInts().
Referenciado por vapiAvailableEfects().
01018 { 01019 vResultResetInts (PreviousResult); 01020 }
Grafo de chamadas desta função:
Here is the caller graph for this function:
void vapiResultResetPoints | ( | vImages * | Images, | |
vOptions * | options, | |||
vMacroResult * | PreviousResult | |||
) |
Definido na linha 1009 do ficheiro vapiOperationsDefault.c.
Referências vResultResetPoints().
Referenciado por vapiAvailableEfects().
01011 { 01012 vResultResetPoints (PreviousResult); 01013 }
Grafo de chamadas desta função:
Here is the caller graph for this function:
void vapiSelectRegion | ( | vImages * | Images, | |
vOptions * | options, | |||
vMacroResult * | PreviousResult | |||
) |
Definido na linha 894 do ficheiro vapiOperationsDefault.c.
Referências _vImages::Actual, vapiImagesSameSize(), vapiImagesSetActual(), vapiOptionsGetBooleans() e vapiOptionsGetInts().
Referenciado por vapiAvailableEfects().
00896 { 00897 IplImage *mask, *copyResult; 00898 CvPoint vertices[4]; 00899 int lineThickness = 1, i; 00900 int connectivity_tmp = 4, new = 255; 00901 int flags_tmp = connectivity_tmp + (new << 8); 00902 int intOption; 00903 00904 for (i = 0; i < 8; i++) 00905 { 00906 intOption = vapiOptionsGetInts (options, i); 00907 if (intOption < 0 || intOption < 0) 00908 { 00909 return; 00910 } 00911 } 00912 00913 mask = vapiImagesSameSize (Images->Actual, 1); 00914 cvSetZero (mask); 00915 00916 for (i = 0; i < 4; i++) 00917 { 00918 vertices[i].x = vapiOptionsGetInts (options, i * 2); 00919 vertices[i].y = vapiOptionsGetInts (options, i * 2 + 1); 00920 if (i > 0) 00921 { 00922 cvLine (mask, 00923 vertices[i - 1], 00924 vertices[i], 00925 CV_RGB (255, 255, 255), lineThickness, 8, 0); 00926 } 00927 if (i == 3) 00928 { 00929 cvLine (mask, 00930 vertices[i], 00931 vertices[0], 00932 CV_RGB (255, 255, 255), lineThickness, 8, 0); 00933 } 00934 00935 } 00936 00937 cvFloodFill (mask, 00938 cvPoint (vertices[0].x + 2, vertices[0].y + 2), 00939 cvScalarAll (255), cvScalarAll (20), cvScalarAll (20), 00940 NULL, flags_tmp, NULL); 00941 00942 if (vapiOptionsGetBooleans (options, 0)) 00943 { 00944 cvNot (mask, mask); 00945 00946 } 00947 copyResult = 00948 vapiImagesSameSize (Images->Actual, 00949 Images->Actual->nChannels); 00950 cvCopy (Images->Actual, copyResult, mask); 00951 vapiImagesSetActual (Images, copyResult); 00952 cvReleaseImage (&mask); 00953 }
Grafo de chamadas desta função:
Here is the caller graph for this function:
void vapiSmooth | ( | vImages * | Images, | |
vOptions * | options, | |||
vMacroResult * | PreviousResult | |||
) |
Definido na linha 149 do ficheiro vapiOperationsDefault.c.
Referências _vImages::Actual, vapiImagesSameSize(), vapiOptionsGetChoices() e vapiOptionsGetInts().
Referenciado por vapiAvailableEfects().
00151 { 00152 IplImage *tempImage; 00153 int smoothType; 00154 00155 switch (vapiOptionsGetChoices (options, 0)) 00156 { 00157 case 0: 00158 { 00159 smoothType = CV_BLUR_NO_SCALE; 00160 break; 00161 } 00162 case 1: 00163 { 00164 smoothType = CV_BLUR; 00165 break; 00166 } 00167 case 2: 00168 { 00169 smoothType = CV_GAUSSIAN; 00170 break; 00171 } 00172 case 3: 00173 { 00174 smoothType = CV_MEDIAN; 00175 break; 00176 } 00177 case 4: 00178 { 00179 smoothType = CV_BILATERAL; 00180 break; 00181 } 00182 default: 00183 { 00184 smoothType = CV_MEDIAN; 00185 break; 00186 } 00187 00188 } 00189 00190 tempImage = vapiImagesSameSize (Images->Actual, 0); 00191 00192 #ifdef VAPI_OS_LINUX 00193 cvSmooth (Images->Actual, tempImage, smoothType, 00194 vapiOptionsGetInts (options, 0), 00195 vapiOptionsGetInts (options, 1), 0); 00196 #else 00197 cvSmooth (Images->Actual, tempImage, smoothType, 00198 vapiOptionsGetInts (options, 0), 00199 vapiOptionsGetInts (options, 1), 0, 0); 00200 #endif 00201 00202 cvCopy (tempImage, Images->Actual, NULL); 00203 00204 cvReleaseImage (&tempImage); 00205 }
Grafo de chamadas desta função:
Here is the caller graph for this function:
void vapiSobel | ( | vImages * | Images, | |
vOptions * | options, | |||
vMacroResult * | PreviousResult | |||
) |
Definido na linha 224 do ficheiro vapiOperationsDefault.c.
Referências vapiImagesCheckChannels(), vapiImagesSameSize(), vapiImagesSameSize16() e vapiImagesSetActual().
Referenciado por vapiAvailableEfects().
00226 { 00227 00228 IplImage *tempImage; 00229 00230 /* 00231 * Apenas pode ser efectuado em imagens com apenas 1 canal 00232 */ 00233 00234 if (!vapiImagesCheckChannels (Images, 1)) 00235 { 00236 return; 00237 } 00238 00239 tempImage = vapiImagesSameSize16 (Images->Actual, 0); 00240 00241 cvSobel (Images->Actual, tempImage, 1, 1, 3); 00242 00243 vapiImagesSetActual (Images, vapiImagesSameSize (tempImage, 0)); 00244 00245 cvConvertScaleAbs (tempImage, Images->Actual, 1, 0); 00246 00247 cvReleaseImage (&tempImage); 00248 00249 }
Grafo de chamadas desta função:
Here is the caller graph for this function:
void vapiTemplateMatch | ( | vImages * | Images, | |
vOptions * | options, | |||
vMacroResult * | PreviousResult | |||
) |
Definido na linha 783 do ficheiro vapiOperationsDefault.c.
Referências _vImages::Actual, v_info(), vapiImagesCheckChannels(), vapiImagesSameSize(), vapiImagesSetActual(), vapiOptionsGetFloats(), vapiOptionsGetTemplate() e vapiResultAddInt().
Referenciado por vapiAvailableEfects().
00785 { 00786 IplImage *result, *template, *OriginalTemplate; 00787 int resultWidth, resultHeight, width, height; 00788 00789 OriginalTemplate = vapiOptionsGetTemplate (options); 00790 00791 if ((OriginalTemplate->width > Images->Actual->width) 00792 || (OriginalTemplate->height > Images->Actual->height)) 00793 { 00794 v_info ("TemplateMatch: Medidas do template superior às da imagem"); 00795 return; 00796 } 00797 //vapiShowImage ("template", options->Template); 00798 00799 /* 00800 * Definição da largura da Matriz de resultados 00801 */ 00802 width = Images->Actual->width; 00803 height = Images->Actual->height; 00804 resultWidth = width - OriginalTemplate->width + 1; 00805 resultHeight = height - OriginalTemplate->height + 1; 00806 00807 result = cvCreateImage (cvSize (resultWidth, resultHeight), 00808 IPL_DEPTH_32F, 1); 00809 00810 00811 /* 00812 * O template e a imagem t�m que ter o mesmo n�mero de canais. 00813 */ 00814 if (!vapiImagesCheckChannels (Images, OriginalTemplate->nChannels)) 00815 { 00816 cvReleaseImage (&result); 00817 return; 00818 } 00819 00820 /* Finalmente, fazer o match. */ 00821 cvMatchTemplate (Images->Actual, 00822 OriginalTemplate, result, CV_TM_CCORR_NORMED); 00823 00824 00825 template = vapiImagesSameSize (result, 1); 00826 00827 cvInRangeS (result, cvScalarAll (vapiOptionsGetFloats (options, 0)), 00828 cvScalarAll (1.1), template); 00829 00830 vapiResultAddInt (PreviousResult, cvCountNonZero (template)); 00831 00832 vapiImagesSetActual (Images, 00833 cvCreateImage (cvSize (width, height), 00834 IPL_DEPTH_8U, 1)); 00835 cvZero (Images->Actual); 00836 00837 cvSetImageROI (Images->Actual, 00838 cvRect (((OriginalTemplate->width / 2)), 00839 ((OriginalTemplate->height / 2)), 00840 result->width, result->height)); 00841 00842 cvCopy (template, Images->Actual, NULL); 00843 cvResetImageROI (Images->Actual); 00844 00845 /* 00846 * Libertar memória de componentes temporários 00847 */ 00848 cvReleaseImage (&result); 00849 cvReleaseImage (&template); 00850 }
Grafo de chamadas desta função:
Here is the caller graph for this function:
void vapiTeste | ( | vImages * | Images, | |
vOptions * | options, | |||
vMacroResult * | PreviousResult | |||
) |
Definido na linha 1023 do ficheiro vapiOperationsDefault.c.
Referências v_debug e v_input_NULL_boolean().
Referenciado por vapiAvailableEfects().
01025 { 01026 vBoolean *Input; 01027 if ((Input = v_input_NULL_boolean (1)) == NULL) 01028 { 01029 v_debug("erro"); 01030 return; 01031 } 01032 if (Input[0]) 01033 { 01034 free(Input); 01035 v_debug ("É verdadeiro"); 01036 } 01037 else 01038 { 01039 free(Input); 01040 v_debug ("É falso"); 01041 } 01042 }
Grafo de chamadas desta função:
Here is the caller graph for this function:
void vapiThreshold | ( | vImages * | Images, | |
vOptions * | options, | |||
vMacroResult * | PreviousResult | |||
) |
Função para efectuar a binarização.
Definido na linha 77 do ficheiro vapiOperationsDefault.c.
Referências _vImages::Actual e vapiOptionsGetInts().
Referenciado por vapiAvailableEfects() e vapiBinarizar().
00079 { 00080 cvThreshold (Images->Actual, Images->Actual, 00081 vapiOptionsGetInts (options, 0), 255, CV_THRESH_BINARY); 00082 }
Grafo de chamadas desta função:
Here is the caller graph for this function: