Matrix *new_M(int M, int N){ //cria mtriz Ma x Na de zeros Matrix *A = NULL; int i, j; if(N > 0 && M > 0) { A = (Matrix *)aloca(sizeof(Matrix)); A->a = (double **)aloca(M*sizeof(double *)); for(i = 0; i < M; i++) A->a[i] = (double *)aloca(N*sizeof(double)); A->rows = M; A->columns = N; for(i = 0; i < A->rows; i++) for(j = 0; j < A->columns; j++) A->a[i][j] = 0; } else { char msg[50]; sprintf(msg, "new_M recebeu tamanhos não positivos!\n"); reportBad(msg); } return(A); }
Matrix *subtract(Matrix *A,Matrix *B) { /*retorna ponteiro alocado para a matriz soma das entradas*/ int i, j, M, N; Matrix *S; if(A->rows == B->rows && A->columns == B->columns) { M = A->rows; N = A->columns; S = new_M(M, N); for(i = 0; i < M; i++) { for(j = 0; j < N; j++) S->a[i][j] = A->a[i][j] - B->a[i][j]; } } else { char msg[50]; sprintf(msg, "Matrizes não tem mesmas dimensões!\n"); reportBad(msg); } return(S); }
void Widget::recordStep(){ QString file = ui->baseNameLineEdit->text(); file = file + QString::number(imageCounter++) + ",png"; const QPixmap *img = ui->OutputImg->pixmap(); bool sucesso = img->save(file, "PNG"); if(sucesso == true) { ui->recorTimeLabel->setText("Tomadas " + QString::number(imageCounter)); } else reportBad("Imagem não pode ser salva!"); }
void kill_M(Matrix **A){ /*apaga a matriz e o seu ponteiro * */ int i; if(*A) { for(i = 0; i < (*A)->rows; i++) libera((*A)->a[i]); libera((*A)->a); libera(*A); (*A) = NULL; } else reportBad("kill_M recebeu matriz não alocada!"); }
void Widget::initVideo(){ bool sucesso; for(int i = 0; i < 10; i++) { sucesso = openVideo(i); if(sucesso) ui->selectVideoComboBox->addItem(QString("Câmera") + QString::number(i)); } for(int i = 0; i < 10; i++) { sucesso = openVideo(i); if(sucesso) break; } if(sucesso == false) { reportBad("Nenhum vídeo de 0 à 10 pode ser inicializado!"); this->clock->stop(); } }
void Widget::drawKalmanResult(Mat &outputFrame, vector<Point> &kalmanCenters){ vector<Vec3f> kalmanCircles; vector<Scalar> colorsToPaint; float radiusKalmanCircles = Raio; //raio é uma variável global definida na interface em tempo de execução if(kalmanCenters.size() != targets.size()) reportBad("O numero de elementos a desenhar e diferente do numero de alvos procurados!"); //gera circulos a serem desenhados for(unsigned int i = 0; i < kalmanCenters.size(); i++){ Vec3f currentCircle(kalmanCenters[i].x, kalmanCenters[i].y, radiusKalmanCircles); kalmanCircles.push_back(currentCircle); colorsToPaint.push_back(targets[i]->colorPaint); } Draw::Circles(outputFrame, kalmanCircles, colorsToPaint); }
bool Widget::openVideo(int n){ if(videoInput == NULL) videoInput = new VideoCapture(n); else { videoInput->release(); videoInput->open(n); } if(!videoInput->isOpened()){ stringstream msg; msg << "webcam " << n << " não pode ser aberta"; reportBad(msg.str()); return false; } if(videoInput->isOpened()) return true; else return false; }
void doGoodBad(struct cdnaInfo *ciList) { struct cdnaInfo *ci; int goodCount = 0; int badCount = 0; int poorCount = 0; struct fineAli *fa; int bestScore; for (ci=ciList; ci!=NULL; ci = ci->next) { if (ci->isDupe) continue; if (ci->fineAli == NULL) { reportBad("%s score %d\n", ci->name, 0); if (ci->roughScore > 32 && ci->roughScore > ci->baseCount/8) addRedoHash(ci, "dropped"); ++badCount; continue; } bestScore = ci->fineScore; if (bestScore < ci->baseCount/2) { fa = ci->fineAli; reportBad("%s score %f at chromosome %s:%ld-%ld gene %s\n", ci->name, (double)bestScore / (double)ci->baseCount, chromNames[fa->chromIx], fa->hStart, fa->hEnd, fa->geneName); addRedoHash(ci, "poor"); ++poorCount; continue; } reportGood("cDNA %s size %d %s\n", ci->name, ci->baseCount, (ci->isEmbryonic ? "embryo" : "unknown")); for(fa = ci->fineAli;fa!=NULL; fa = fa->next) { if (fa->isDupe) continue; if (fa->score >= bestScore) { char *chromName = chromNames[fa->chromIx]; struct ffAli *ali, *lastAli = NULL; fa->isGood = TRUE; reportGood("\tscore %f chromosome %s strand %c %c gene %s\n", (double)fa->score / (double)ci->baseCount, chromName, (fa->isRc ? '-' : '+'), (fa->isBackwards ? '-' : '+'), fa->geneName); for (ali=fa->blocks; ali != NULL; ali = ali->right) { reportGood("\t\t%3d %3d | %d %d size %3d goodEnds %2d %2d", ali->nStart - fa->virtNeedle, ali->nEnd - fa->virtNeedle, ali->hStart - fa->virtHaystack, ali->hEnd - fa->virtHaystack, ali->nEnd - ali->nStart, ali->startGood, ali->endGood); if (lastAli != NULL) reportGood(" gap %d | %d", ali->nStart - lastAli->nEnd, ali->hStart - lastAli->hEnd); reportGood("\n"); lastAli = ali; } } } ++goodCount; } printf("%d Good %d Poor %d Bad\n", goodCount, poorCount, badCount); }
void Widget::pauseVideo(){ this->clock->stop(); reportBad("O video esta sendo pausado"); }