Пример #1
0
ImageDialog::ImageDialog(LfMachine * world, QWidget *parent)
    : QDialog(parent)
{
	int wd = 100, ht = 100;
	std::string sprop = "unknown";
	std::string stitle = "Unknown Image";
	
	const LfParameter * lparam = world->param();
	if(lparam->numImages() > 0) {
		lparam->getImageSize(wd, ht, 0);
		sprop = boost::str(boost::format("num pixels %1%") 
						% lparam->imageNumPixels(0) );
		stitle = lparam->imageName(0);
	}
	
	m_dictView = new DictionaryView(this);
	m_statistics = new QLabel(tr(sprop.c_str() ));
	
	QVBoxLayout * layout = new QVBoxLayout;
	layout->addWidget(m_dictView);
	layout->addWidget(m_statistics);
	layout->setStretch(0, 1);
	layout->setContentsMargins(4, 4, 4, 4);
	setLayout(layout);

    setWindowTitle(tr(stitle.c_str()));
	
    resize(wd, ht+10);
	
	connect(this, SIGNAL(sendImage(QImage)),
            m_dictView, SLOT(recvDictionary(QImage)));
}
Пример #2
0
Server::Server(QObject *parent) :
    QObject(parent), tcpServer(0), networkSession(0), memBuf(NULL)
{
    QNetworkConfigurationManager manager;
    if (manager.capabilities() & QNetworkConfigurationManager::NetworkSessionRequired) {
        // Get saved network configuration
        QSettings settings(QSettings::UserScope, QLatin1String("QtProject"));
        settings.beginGroup(QLatin1String("QtNetwork"));
        const QString id = settings.value(QLatin1String("DefaultNetworkConfiguration")).toString();
        settings.endGroup();

        // If the saved network configuration is not currently discovered use the system default
        QNetworkConfiguration config = manager.configurationFromIdentifier(id);
        if ((config.state() & QNetworkConfiguration::Discovered) !=
            QNetworkConfiguration::Discovered) {
            config = manager.defaultConfiguration();
        }

        networkSession = new QNetworkSession(config, this);
        connect(networkSession, SIGNAL(opened()), this, SLOT(sessionOpened()));

        QTextStream out(stdout);
        out << tr("Opening network session.");

        networkSession->open();
    } else {
        sessionOpened();
    }

    connect(tcpServer, SIGNAL(newConnection()), this, SLOT(sendImage()));
}
Пример #3
0
int main(int argc, char *argv[]) {
	initialize();

	sendImage();

	finalize();
	return 0;
}
Пример #4
0
void TcpController::sendImageHOG(Imagem image, int qtd)
{
   sendImageNotProcess(image.frameNotProcess);
   sendImage(image.frame,qtd,PORT_IMAGE_HOG);
   //TcpServer *s = searchTcpServer(port);
   //s->sendaData(image.nome.toLatin1());
   //s->sendaData(image.);

}
Пример #5
0
int leconnect(bool reconnect)
{
	if (can_reconect && reconnect==FALSE)
	{
		image_already_bytes = 0;
		free(image_bytes);
	}

	if (app.status == APP_STATUS_TRANSMITTER && image_bytes_length <= 0)
	{
		printf("\nNO IMAGE SELECTED!");
	}
	else if (connect() == 0)
	{
		conection_open = TRUE;

		if (
			(app.status == APP_STATUS_TRANSMITTER ?
			sendImage(reconnect) : receiveImage(reconnect)) == 0)
		{
			show_display = NO;
			llclose(app.fd);

			//save file if receiver
			if (app.status == APP_STATUS_RECEIVER){
				if (save2File(image_bytes, image_bytes_length, image_name) != OK){

					printf("\nImage was not saved sucessfully.\n");
					free(image_bytes);
					image_bytes_length = 0;
					return -1;
				}
				free(image_bytes);
				image_bytes_length = 0;
				printf("\nImage was saved sucessfully.\n");
			}

		}
		close_tio(app.fd);
		conection_open = FALSE;

		show_display = NO;

	}

	return 0;
}
Пример #6
0
void ImageProcessor::filterAutoContrast(RectArea rect, QImage& img,
                                        int minGray, int maxGray) {

  for(int i=0;i<rect.width-1;i++) {
    for(int j=0;j<rect.height-1;j++) {
      int current=255/(maxGray-minGray)*
          (qGray(img.pixel(i+rect.x,j+rect.y))-minGray);
      if (current>255) current=maxGray;
      img.setPixel(i+rect.x,
                      j+rect.y,
                      current*0x010101);
    }
  }
  if (DebugMode) {
    sendImage(*image);
    writeLog(QString(tr("Autocontrast")));
  }
}
Пример #7
0
void ImageProcessor::approximateBorder(RectArea rect, QImage& img) {

  for(int i=0;i<rect.width-1;i++) {
    for(int j=0; j<rect.height-1;j++) {
      if ((abs(i-0)<=2) ||
           (abs(j-0)<=2) ||
           (abs(i-rect.width)<=2) ||
           (abs(j-rect.height)<=2) 
         ) {
        img.setPixel(i+rect.x,j+rect.y,0x000000);
      }
    }
  }
  if (DebugMode) {
    sendImage(*image);
    writeLog(QString(tr("Drawing black borders")));
  }
}
Пример #8
0
void WebcamConfigurationAnalyzer::analyze(const IplImage* currentImage)
{
  if (!currentImage)
    return;

  liveVideoFrameCopy = cvCreateImage(cvGetSize(currentImage), 8, 3);

  cvCopy(currentImage, liveVideoFrameCopy, 0);

  // declare a destination IplImage object with correct size, depth and channels
  IplImage *smallImage = cvCreateImage( cvSize(128,128),liveVideoFrameCopy->depth, liveVideoFrameCopy->nChannels );

  //use cvResize to resize source to a destination image
  cvResize(liveVideoFrameCopy, smallImage);
  emit sendImage(*SimonCV::IplImage2QImage(smallImage));

  cvReleaseImage(&smallImage);
  cvReleaseImage(&liveVideoFrameCopy);
}
Пример #9
0
void ImageProcessor::filterAverage(RectArea rect, QImage& img) {

  std::vector<std::vector<kaverage> > vsquare (rect.width,std::vector<kaverage>(
                                               rect.height));
  int average;

  for(int i=0;i<rect.width;i++) {
    for(int j=0; j<rect.height;j++) {
      vsquare[i][j].Gray=qGray(img.pixel(i+rect.x,j+rect.y));
      vsquare[i][j].k=0;
      average+=vsquare[i][j].Gray;
    }
  }
  average=average/(rect.width*rect.height);
  
  std::vector<int> arr;

  for(int i=2;i<rect.width-2;i++) {
    for(int j=2; j<rect.height-2;j++) {
      arr.clear();
      for (int k=-2; k<=2; k++) {
        for (int l=-2; l<=2; l++) {
          if(abs(k*k+l*l)<2)
            arr.push_back(vsquare[i+k][j+l].Gray);
        }
      }
      int avrg=0;
      for(int m=0;(static_cast<unsigned int>(m))<arr.size();m++) {
        avrg+=arr[m];
      }
      avrg/=arr.size();
      img.setPixel(i+rect.x,j+rect.y,avrg*0x010101);
        //qApp->processEvents();
    }
  }
  if (DebugMode) {
    sendImage(*image);
    writeLog(QString(tr("AverageFilter")));
  }

}
/**
*	Upload an image to an account
*
*	@param	QString imagePath	the image path
*	@param	QString tags	        image tags
*	@param	QString resizeOption	the resize option,
*					default value is resample
*	@param	QString user		the user ident
*	@param	QString password	    the user password
*	@access	private
*/
void ImageShackUploader::uploadOneImage(ImageShackObject *  image, QString userName, QString userPassword)
{
    QHash<QString, QString> headers;

    //headers["fileupload"] = imageInfos.fileName();
    headers["optsize"]	  = image->getResizeOption();
    headers["optimage"]   = (image->getResizeOption() == "") ? QString("0") : QString("1");
    headers["tags"]       = image->getTags();
    headers["rembar"]	  = (this->removeInformationBar == true) ? QString("yes") : QString("no");
    headers["public"]	  = (image->isPublic()) ? QString("yes") : QString("no");
    headers["key"]        = this->developerKey;
    headers["xml"]	      = QString("yes");

    if(userName != "" )
    {
        headers["a_username"] = userName;
        headers["a_password"] = userPassword;
    }

    sendImage(image,headers);
}
Пример #11
0
void ImageProcessor::filterMedian(RectArea rect, QImage& img) {

  std::vector<std::vector<kaverage> > vsquare (rect.width,std::vector<kaverage>(
                                               rect.height));
  int average;

  for(int i=0;i<rect.width;i++) {
    for(int j=0; j<rect.height;j++) {
      vsquare[i][j].Gray=qGray(img.pixel(i+rect.x,j+rect.y));
      vsquare[i][j].k=0;
      average+=vsquare[i][j].Gray;
    }
  }
  average=average/(rect.width*rect.height);
  
  std::vector<int> arr;

  for(int i=2;i<rect.width-2;i++) {
    for(int j=2; j<rect.height-2;j++) {
      arr.clear();
      for (int k=-2; k<=2; k++) {
        for (int l=-2; l<=2; l++) {
          if(abs(k*k+l*l)<2)
            arr.push_back(vsquare[i+k][j+l].Gray);
        }
      }
      std::sort(&arr[0], &arr[arr.size()]);
      img.setPixel(i+rect.x,j+rect.y,arr[
           // 0
          arr.size()/2
              ]*0x010101);
        //qApp->processEvents();
    }
  }
  if (DebugMode) {
    sendImage(*image);
    writeLog(QString(tr("MedianFilter")));
  }

}
Пример #12
0
GraphicsView::GraphicsView()
{
    QGraphicsScene *scene = new QGraphicsScene(0, 0, 600, 400);
    for (int i = 0; i < 4; ++i) {
        Circle *item = new Circle;
        scene->addItem(item);
        objects << item;
    }
    robot = new Robot;
    //robot->scale(1.2, 1.2);
    robot->setPos(300, 200);
    scene->addItem(robot);
    setScene(scene);
    setRenderHint(QPainter::Antialiasing);
    setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate);
    setBackgroundBrush(QColor(230, 200, 167));
    setWindowTitle("Tutorial unit");
    connect(&timer, SIGNAL(timeout()), SLOT(sendImage()));
    reset(false);
    timer.start(100);
    sInstance = this;
}
Пример #13
0
void ImageProcessor::filterDilation(RectArea rect, QImage& img) {

  std::vector<std::vector<kaverage> > vsquare (rect.width,std::vector<kaverage>(
                                               rect.height));
  int average;

  for(int i=0;i<rect.width;i++) {
    for(int j=0; j<rect.height;j++) {
      vsquare[i][j].Gray=qGray(img.pixel(i+rect.x,j+rect.y));
      vsquare[i][j].k=0;
      average+=vsquare[i][j].Gray;
    }
  }
  average=average/(rect.width*rect.height);

  for(int i=2;i<rect.width-2;i++) {
    for(int j=2; j<rect.height-2;j++) {
      for (int k=-1; k<=1; k++) {
        for (int l=-1; l<=1; l++) {
        if ((abs(k)+abs(l))<2) 
          if (vsquare[i+k][j+l].Gray) {
            img.setPixel(i+rect.x,j+rect.y,0xffffff);
            break;
          }
          if (vsquare[i+k][j+l].Gray) break;
        }
      }
    //  img.setPixel(i+rect.x,j+rect.y,arr[
           // 0
      //    arr.size()/2
     //         ]*0x010101);
    }
  }
  if (DebugMode) {
    sendImage(*image);
    writeLog(QString(tr("Dilation")));
  }
}
Пример #14
0
YahooWebcam::YahooWebcam( YahooAccount *account ) : QObject( 0 )
{
	setObjectName( QLatin1String("yahoo_webcam") );
	kDebug(YAHOO_GEN_DEBUG) ;
	theAccount = account;
	theDialog = 0L;
	m_img = new QImage();

	m_sendTimer = new QTimer( this );
	connect( m_sendTimer, SIGNAL(timeout()), this, SLOT(sendImage()) );	

	m_updateTimer = new QTimer( this );
	connect( m_updateTimer, SIGNAL(timeout()), this, SLOT(updateImage()) );	

	theDialog = new YahooWebcamDialog( "YahooWebcam" );
	connect( theDialog, SIGNAL(closingWebcamDialog()), this, SLOT(webcamDialogClosing()) );
#ifndef VIDEOSUPPORT_DISABLED
	m_devicePool = Kopete::AV::VideoDevicePool::self();
	m_devicePool->open();
	m_devicePool->setImageSize(320, 240);
	m_devicePool->startCapturing();
	m_updateTimer->start( 250 );
#endif
}
Пример #15
0
void ImageDialog::recvImage(const QImage &image)
{
	if(isVisible() )
		emit sendImage(image);
}
Пример #16
0
void ImageProcessor::findPieces(std::vector<std::vector<PieceSquare> > &ChessDesk) {
  RectArea CurrentSquare=findSquare(0,0);

  // Finding min and max brightness for autocontrast.
  int MaxGrayPixel=0;
  int MinGrayPixel=255;

  for(int i=0;i<8;i++) {
    for(int j=0;j<8;j++) {
      CurrentSquare=findSquare(i,j);
      for(int k=0;k<CurrentSquare.width-1;k++) {
        for(int l=0;l<CurrentSquare.height-1;l++) {
          int CurrentGrayPixel=qGray(image->pixel(CurrentSquare.x+k,CurrentSquare.y+l));
          if (CurrentGrayPixel>MaxGrayPixel) {
            MaxGrayPixel=CurrentGrayPixel;
          }
          if (CurrentGrayPixel<MinGrayPixel) {
            MinGrayPixel=CurrentGrayPixel;
          }
        }
      }
    }
  }
  
  writeLog(QString(tr("Minimum brightness: %1; Maximium brightness: %2;")).arg(MinGrayPixel).arg(MaxGrayPixel));

  
  int a[256];

  for(int i=0;i<256;i++) {a[i]=0;}
  
  for(int i=0;i<8;i++) {
    for(int j=0;j<8;j++) {
      CurrentSquare=findSquare(i,j);

      if ((MaxGrayPixel-MinGrayPixel)<128) {
        filterAutoContrast(CurrentSquare, *image,MinGrayPixel,MaxGrayPixel);
        filterAverage(CurrentSquare, *image);
      }
      filterMedian(CurrentSquare, *image);

      for(int k=0;k<CurrentSquare.width-1;k++) {
        for(int l=0;l<CurrentSquare.height-1;l++) {
          a[qGray(image->pixel(CurrentSquare.x+k,CurrentSquare.y+l))]++;
        }
      }
      CurrentSquare.x--;
      CurrentSquare.y--;
      CurrentSquare.width++;
      CurrentSquare.height++;
      drawRect(CurrentSquare);
    }
  }

  int max=0;

  for(int i=0;i<256;i++) {
    if (a[i]>max) max=a[i];
    //writeLog(QString("G %1 %2").arg(i).arg(a[i]));
  }

  writeLog(QString("MAX %1").arg(max));
  for(int i=0;i<256;i++) {
    for(int j=0;j<static_cast<int>((static_cast<double>(a[i]))*500/max);j++) {
      //image->setPixel(i,j,0x0000ff);
    }
  }
  
  std::vector<int> sorta;
  for(int i=0;i<256;i++) {
    sorta.push_back(a[i]);
  }
  std::sort(&sorta[0], &sorta[sorta.size()]);
  std::vector<int> Maximums;
  for (int i=255;i>=0;i--) {
    int IsInsideExtr=0;
    int EnterExtr=0;
    int LastEnter=-10;
    for(int j=0;j<256;j++) {
      if ((a[j]>sorta[i]) && (!IsInsideExtr)) {
        IsInsideExtr=1;
        EnterExtr++;
        if (abs(LastEnter-j)<10) {
          IsInsideExtr=0;
          EnterExtr--;
          Maximums.pop_back();
        } else {
          LastEnter=j;
          Maximums.push_back(j);
          writeLog(QString("POS %1").arg(j));
        }
      }

      if ((a[j]<sorta[i]) && (IsInsideExtr)) {
        IsInsideExtr=0;
      }
    }
    writeLog(QString("EXT %1").arg(EnterExtr));
    if (EnterExtr>=2) {break;} else Maximums.clear();
  }
  
  std::sort(&Maximums[0], &Maximums[Maximums.size()]);

  while (a[Maximums[0]]>0){Maximums[0]--;}
  while (a[Maximums[1]]>0){Maximums[1]++;}
  writeLog(QString("M1 %1 M2 %2").arg(Maximums[0]).arg(Maximums[1]));
;

  /////////////////////////////////////!!!!!!!!!!!!!!!!!!!!!!!!
  
  for(int i=0;i<8;i++) {
    for(int j=0;j<8;j++) {
      CurrentSquare=findSquare(i,j);

      int AboveScale=0;
      int BelowScale=0;
      for(int k=0;k<CurrentSquare.width-1;k++) {
        for(int l=0;l<CurrentSquare.height-1;l++) {
          int current=qGray(image->pixel(CurrentSquare.x+k,CurrentSquare.y+l));
          if ((current<Maximums[0]) || (current>Maximums[1])) { 
            image->setPixel(CurrentSquare.x+k,CurrentSquare.y+l,0xffffff);
            if (current<Maximums[0]) BelowScale++;
            if (current>Maximums[1]) AboveScale++;
          } else 
          {
            image->setPixel(CurrentSquare.x+k,CurrentSquare.y+l,0x000000);
          }
        }
      }

      if (AboveScale>BelowScale) {
        ChessDesk[i][j].Color=1;
      } else {
        ChessDesk[i][j].Color=0;
      }
      
      writeLog(QString(tr("X %1 Y %2 C %3")).arg(i+1).arg(j+1).arg(ChessDesk[i][j].Color));

      if (DebugMode) {
        sendImage(*image);
        writeLog(QString(tr("Binarizing square X:%1 Y:%2.")).arg(i+1).arg(j+1));
      }
        
      approximateBorder(CurrentSquare, *image);

      if ((MaxGrayPixel-MinGrayPixel)<128) {
        filterDilation(CurrentSquare, *image);
        filterErosion(CurrentSquare, *image);
      }

      filterErosion(CurrentSquare, *image);
      filterDilation(CurrentSquare, *image);
      filterFigure(CurrentSquare, *image);
      recognizePiece(CurrentSquare, *image, ChessDesk[i][j]);
    }
  }
  
  for(int i=0;i<8;i++) {
    for(int j=0;j<8;j++) {
      if (ChessDesk[i][j].Type) {
        int type=ChessDesk[i][j].Type;
        int color=ChessDesk[i][j].Color;
        if (type==1 && color==0)
          writeLog(QString("X %1 Y %2 F %3").arg(i+1).arg(j+1).arg("Black King"));
        if (type==1 && color==1)
          writeLog(QString("X %1 Y %2 F %3").arg(i+1).arg(j+1).arg("White King"));
        if (type==2 && color==0)
          writeLog(QString("X %1 Y %2 F %3").arg(i+1).arg(j+1).arg("Black Queen"));
        if (type==2 && color==1)
          writeLog(QString("X %1 Y %2 F %3").arg(i+1).arg(j+1).arg("White Queen"));
        if (type==3 && color==0)
          writeLog(QString("X %1 Y %2 F %3").arg(i+1).arg(j+1).arg("Black Pawn"));
        if (type==3 && color==1)
          writeLog(QString("X %1 Y %2 F %3").arg(i+1).arg(j+1).arg("White Pawn"));
      }
    }
  }
  /////////////////////////////////////
  CheckMatePosition CurrentAttack=checkPosition(ChessDesk);

  delete image;
  image = new QImage(*source);
  drawRect(ChessArea,0xff0000);
  for(int i=0;i<8;i++) {
    for(int j=0;j<8;j++) {
      CurrentSquare=findSquare(i,j);
      if (ChessDesk[i][j].Type) {
        int type=ChessDesk[i][j].Type;
        int color=ChessDesk[i][j].Color;
        if (type==1 && color==0) //Black King
          drawRect(CurrentSquare,qRgb(30,89,19),5);
        if (type==1 && color==1) //White King
          drawRect(CurrentSquare,qRgb(121,11,11),5);
        if (type==2 && color==0) //Black Queen
          drawRect(CurrentSquare,qRgb(54,179,35),5);
        if (type==2 && color==1) //White Queen
          drawRect(CurrentSquare,qRgb(237,44,44),5);
        if (type==3 && color==0) //Black Pawn
          drawRect(CurrentSquare,qRgb(177,235,167),5);
        if (type==3 && color==1) //White Pawn
          drawRect(CurrentSquare,qRgb(250,192,192),5);
      }
    }
  }

  
  drawAttack(CurrentAttack);

  sendImage(*image);
}
void SegmentationEventHandler::handleResult(const Mat& finalImage) {
    emit sendImage(ImageTypeConverter::convertMat2QImage(finalImage));
}
Пример #18
0
static void * sendImageVersion(void * cls) {
	DBService * dbs = getDBService();
	StorageService * sts = getStorageService();
	VMRebuilderService * vms = getVMRebuilderService();
	SendImageArgs * sia = (SendImageArgs *)cls;
	ImageVersion * iv = sia->iv;
	int fd = sia->fd;
	uint32_t versions = iv->img->versions - iv->version;
	uint32_t blocks = iv->size / BLOCK_SIZE;
	uint32_t i, j;
	uint32_t seeks = 0;

	// Work with most recent version
	if (iv->version == iv->img->versions - 1) {
		sendImage(cls);
		return NULL;
	}

	VersionMapRebuilder * vmr = vms->newVersionMapRebuilder(iv);

	for (i = 0; i < versions; i++) {
		for (j = 0; j < min(vmr->ivs[i]->seg_cnt, SEGMENT_PREFETCH_AHEAD); j++) {
			Segment * seg = dbs->findSegment(&vmr->ivs[i]->segmentfps[j]);
			sts->prefetchSegmentStore(seg);
		}
	}

	Segment * s_iseg = NULL;
	uint32_t s_iblk = 0, s_cnt = 0;

	for (i = 0; i < blocks; i++) {
		if (i % SEG_BLOCKS == 0) {
			uint32_t segnr = i / SEG_BLOCKS + SEGMENT_PREFETCH_AHEAD;
			for (j = 0; j < versions; j++) {
				if (segnr < vmr->ivs[j]->seg_cnt) {
					Segment * seg = dbs->findSegment(
							&vmr->ivs[j]->segmentfps[segnr]);
					sts->prefetchSegmentStore(seg);
				}
			}
		}
		VersionMapEntry en = vms->getVersionMapEntry(vmr, i);
		if (en.ver == -1) {
			if (s_cnt) {
				SegmentStore * ss = sts->getSegmentStore(s_iseg);
				sts->pipeSegment(ss, fd, s_iblk, s_cnt);
				sts->putSegmentStore(ss);
			}
			sts->pipeZero(fd);
			s_cnt = 0;
			continue;
		}
		ImageVersion * cur_iv = vmr->ivs[en.ver - iv->version];
		Segment * seg = dbs->findSegment(
				&cur_iv->segmentfps[en.blk / SEG_BLOCKS]);
		uint32_t iblk = en.blk % SEG_BLOCKS;

		if (s_iseg == seg && s_iblk + s_cnt == iblk) {
			s_cnt++;
			continue;
		}
		if (s_cnt) {
			SegmentStore * ss = sts->getSegmentStore(s_iseg);
			sts->pipeSegment(ss, fd, s_iblk, s_cnt);
			sts->putSegmentStore(ss);
			seeks++;
		}
		s_iseg = seg;
		s_iblk = iblk;
		s_cnt = 1;
	}
	if (s_cnt) {
		SegmentStore * ss = sts->getSegmentStore(s_iseg);
		sts->pipeSegment(ss, fd, s_iblk, s_cnt);
		sts->putSegmentStore(ss);
		seeks++;
	}

	seeks -= iv->seg_cnt;

	vms->destroyVersionMapRebuilder(vmr);
	close(sia->fd);
	free(sia);

	pthread_exit(NULL);
	return NULL;
}
Пример #19
0
void ImageProcessor::recognizePiece(RectArea rect, QImage& img, PieceSquare &ChessDeskPiece) {
  

  std::vector<std::vector<kaverage> > vsquare (rect.width,std::vector<kaverage>(
                                               rect.height));
  int average;
  int NumOfPixels=0;

  int HasPiece=0;
  for(int i=1;i<rect.width-1;i++) {
    for(int j=1; j<rect.height-1;j++) {
      vsquare[i][j].Gray=qGray(img.pixel(i+rect.x,j+rect.y));
      if (vsquare[i][j].Gray) NumOfPixels++;
      if (vsquare[i][j].Gray && !HasPiece) HasPiece=1;
      vsquare[i][j].k=0;
      average+=vsquare[i][j].Gray;
    }
  }
  average=average/(rect.width*rect.height);

  if (HasPiece) {
    double Elongation=0;
    double Compaction=0;

    int Perimeter=0;
    int VolumeArea=0;

    for(int i=1;i<rect.width-1;i++) {
      for(int j=1; j<rect.height-1;j++) {
        if (vsquare[i][j].Gray) {
          VolumeArea++;
          if (!vsquare[i+1][j+1].Gray ||
              !vsquare[i+1][j].Gray ||
              !vsquare[i+1][j-1].Gray ||
              !vsquare[i][j+1].Gray ||
              !vsquare[i][j-1].Gray ||
              !vsquare[i-1][j+1].Gray ||
              !vsquare[i-1][j].Gray ||
              !vsquare[i-1][j-1].Gray) {
            Perimeter++;
              }
        }
      }
    }
    
    Compaction=static_cast<double>(Perimeter*Perimeter)/VolumeArea;
    //writeLog(QString("Perimeter %1 \n Square %2").arg(Perimeter).arg(VolumeArea));

    writeLog(QString("Compact %3").arg(Compaction));

    int XCenterMass=0;
    int YCenterMass=0;
    
    for(int i=1;i<rect.width-1;i++) {
      for(int j=1; j<rect.height-1;j++) {
        if (vsquare[i][j].Gray) {
          XCenterMass+=i;
          YCenterMass+=j;
        }
      }
    }
    XCenterMass/=NumOfPixels;
    YCenterMass/=NumOfPixels;
    //writeLog(QString("XCenterMass %1 YCenterMass %2").arg(XCenterMass).arg(YCenterMass));

    double m02=0;
    double m20=0;
    double m11=0;
    
    for(int i=1;i<rect.width-1;i++) {
      for(int j=1; j<rect.height-1;j++) {
        if (vsquare[i][j].Gray) {
          m02+=(YCenterMass-j)*(YCenterMass -j);
          m20+=(XCenterMass-i)*(XCenterMass -i);
          m11+=(i-XCenterMass)*(j-YCenterMass);
        }
      }
    }
    Elongation=(m20+m02+sqrt((m20-m02)*(m20-m02)+4*m11*m11))/
               (m20+m02-sqrt((m20-m02)*(m20-m02)+4*m11*m11));
    writeLog(QString("Elongation %1 \n").arg(Elongation));

    if (Elongation>2) {
      ChessDeskPiece.Type=3; // Pawn
    } else {
        if (Compaction>50) {
          ChessDeskPiece.Type=2; //Queen
      } else {
          ChessDeskPiece.Type=1; //King
      }
    }


  } else {
    ChessDeskPiece.Type=0;
  }
  if (DebugMode) {
    sendImage(*image);
    writeLog(QString(tr("Piece recognition")));
  }
}
Пример #20
0
void ImageProcessor::filterFigure(RectArea rect, QImage& img) {


  std::vector<std::vector<kaverage> > vsquare (rect.width,std::vector<kaverage>(
                                               rect.height));
  int average;

  for(int i=0;i<rect.width;i++) {
    for(int j=0; j<rect.height;j++) {
      vsquare[i][j].Gray=qGray(img.pixel(i+rect.x,j+rect.y));
      vsquare[i][j].k=0;
      average+=vsquare[i][j].Gray;
    }
  }
  average=average/(rect.width*rect.height);

  int CurrentLabelNumber=0;

  for(int i=1;i<rect.width-1;i++) {
    for(int j=1; j<rect.height-1;j++) {

      if (vsquare[i][j].Gray) {
        if(!vsquare[i-1][j].k && !vsquare[i][j-1].k) {
          CurrentLabelNumber++;
          vsquare[i][j].k=CurrentLabelNumber;
        }

        else if ((!vsquare[i-1][j].k && vsquare[i][j-1].k) ||
                  (vsquare[i-1][j].k && !vsquare[i][j-1].k)) {
          if (vsquare[i-1][j].k) {vsquare[i][j].k=vsquare[i-1][j].k;}
          if (vsquare[i][j-1].k) {vsquare[i][j].k=vsquare[i][j-1].k;}
        }

        else if (vsquare[i-1][j].k && vsquare[i][j-1].k) {
          if (vsquare[i-1][j].k == vsquare[i][j-1].k){
            vsquare[i][j].k=vsquare[i][j-1].k;
          }
          else {
            int tmpLabel=vsquare[i-1][j].k;
            vsquare[i][j].k=vsquare[i][j-1].k;
            for(int m=1;m<rect.width-1;m++) {
              for(int l=1; l<rect.height-1;l++) {
                if (vsquare[m][l].k==tmpLabel) {
                  vsquare[m][l].k=vsquare[i][j-1].k;
                }
              }
            }
          }
        }
      }

    }
  }

  std::vector<int> GkArea(CurrentLabelNumber+1,0);

  for(int i=1;i<rect.width-1;i++) {
    for(int j=1; j<rect.height-1;j++) {
      if (vsquare[i][j].k!=0) GkArea[vsquare[i][j].k]++;
    }
  }

  int MaxK=0;
  int ThisK=0;

  for (int i=1; (static_cast<unsigned int>(i))<GkArea.size(); i++) {
     if (GkArea[i]>MaxK) {
       MaxK=GkArea[i];
       ThisK=i;
     }
  }

  for(int i=1;i<rect.width-1;i++) {
    for(int j=1; j<rect.height-1;j++) {
      if (vsquare[i][j].k!=ThisK) {vsquare[i][j].k=0;}
            else
            if (GkArea[vsquare[i][j].k]<100) {vsquare[i][j].k=0;}
    }
  }

  for(int i=1;i<rect.width-1;i++) {
    for(int j=1; j<rect.height-1;j++) {
      img.setPixel(rect.x+i,rect.y+j,vsquare[i][j].k?0xffffff:0x000000
                   //0xffffff*vsquare[i][j].k/(CurrentLabelNumber+2)
                  );
    }
  }
  if (DebugMode) {
    sendImage(*image);
    writeLog(QString(tr("Finding compact spaces.")));
  }
}
Пример #21
0
void ConvDistThread :: run (void)
{
    if (!convParameters)
        return;
    QTime * fftTime = new QTime;
    fftTime->start();
    mFile.lock ();
    int ndn = convParameters->getNRChannels();
    int nd = FFT_Transform::pow2roundup (ndn);
    int nd2 = 2*ndn;
    CalcOpor1 * cop = new CalcOpor1 (nd);
    complex<double> * opor = cop->calc();//new complex<double> [nd];
    int N1 = convParameters->getImpNumb();
    qDebug () << __PRETTY_FUNCTION__ << N1;
    QFile fContData (QString ("stc4.dat"));
    fContData.open (QIODevice::WriteOnly);
    QTextStream stCont (&fContData);
    FFT_Transform fft;// = new FFT_Transform;
    emit sendData (opor, N1);
    //radDataWidget * wOpFFT = new radDataWidget (opor, N1);
    //emit sendWidget (wOpFFT, this);
/*    QMdiSubWindow * subWopFFT = m_mdiArea->addSubWindow (wOpFFT);
    wOpFFT->show ();
    subWopFFT->setAttribute (Qt::WA_DeleteOnClose);
*/
    QFile contOp ("opor_after_FFT.dat");
    contOp.open (QIODevice::WriteOnly);
    QTextStream stOp (&contOp);
    for (int i=0; i<N1; i++)
    {
        double re = real (opor[i])*nd;
        double im = imag (opor[i])*nd;
        stOp << re << " " << im << "i" << endl;
    }
    contOp.close ();

    QString fileName = convParameters->getInputFileName();
    QFile fData (fileName);
    quint8 * st = new quint8 [nd2];
    for (int i=0; i<nd2; i++)
    {
        st [i] = 0;
    }
    complex<double> * stc = new complex<double>[nd];
    complex<double> * stc1 = new complex<double>[nd];
    for (int i=0; i<nd; i++)
    {
        stc[i] = complex<double> (0.0, 0.0);
        stc1[i] = complex<double> (0.0, 0.0);
    }
    int a = 0;
    Q_UNUSED (a);

    FILE * fid5 = fopen (fileName.toAscii().constData(), "rb");
    qDebug () << __PRETTY_FUNCTION__ << fileName.toAscii().constData() << fid5;
    if (!fData.open (fid5, QIODevice::ReadOnly | QIODevice::Unbuffered))
    {
        mFile.unlock();
        return;
    }

    QString fileConvName = convParameters->getConvFileName();//QFileDialog::getSaveFileName (this, tr("Save 1st data"), QDir::currentPath(), tr("All files (*)"));

    FILE * fid6 = fileConvName.isEmpty() ? 0 : fopen (fileConvName.toAscii().constData(), "w+");

    int na = convParameters->getChannelsNumb ();
    qDebug () << __PRETTY_FUNCTION__ << (int)na;
    QAbstractItemModel * radModel = new QStandardItemModel (nd2, 1, 0);// (nd2, na);
    Q_UNUSED (radModel);

    int nr (0);
    Q_UNUSED (nr);
    QFile fContStData (QString ("stc.dat"));
    fContStData.open (QIODevice::WriteOnly);
    QTextStream stContSt (&fContStData);
    QSize imSize (nd, FFT_Transform::pow2roundup(na/50));
    QImage * convImage = new QImage (imSize, QImage::Format_RGB32);//QImage::Format_Mono);
    if (!convImage || convImage->size().isNull())
    {
        if (convImage)
            delete convImage;
        mFile.unlock();
        return;
    }
    convImage->fill (0);
    double maxval = 0.0;
//    stc2MatrAbs = new double (na*nd);
    qDebug () << __PRETTY_FUNCTION__ << fftTime->elapsed ();
    int nThr = convParameters->getNumThreads();
    fftw_init_threads ();
    fftw_plan_with_nthreads (nThr);
    for (int i0=0; i0<na; i0++)
    {
//        qDebug () << __PRETTY_FUNCTION__ << QString("Read new data");
/*        ConvDistColumnThread * thrCol = new ConvDistColumnThread (convParameters, fid5, fid6, i0, 0);
        connect (thrCol, SIGNAL (terminated()), this, SLOT (columnTerminated()) );
        connect (thrCol, SIGNAL (finished()), this, SLOT (columnFinished()) );
        thrCol->start();
        //while (!thrCol->isFinished())
        //    ;
        thrCol->wait();
        //thrCol->deleteLater();
*/
        int cr = fread (st, sizeof (quint8), nd2, fid5);
        if (cr <= 0)
            return;
        for (int ii=0; ii< nd2; ii++)
        {
            if (i0<1)
            {
                QModelIndex wcIndex = radModel->index (nr, 0);
                radModel->setData (wcIndex, QString::number (st[ii]), Qt::DisplayRole);
                nr++;
            }
        }

        for (int ii=0; ii<128; ii++)
            st[ii] = 0.0;

        for (int ii=0; ii<ndn; ii++)
        {
            double re = st[2*ii+1];
            double im = st[2*ii];
            if (re > 128)
                re -= 256;
            if (im > 128)
                im -= 256;
            if (i0==0)
                stContSt << re << " " << im << endl;
            stc[ii] = complex<double> (re, im);//st[2*ii], st[2*ii+1]);
        }
        complex<double> * stc4 = 0;//new complex<double> [nd];
        stc4 = fft (stc, nd, nd, FFTW_FORWARD, FFTW_ESTIMATE);
        //qDebug () << __PRETTY_FUNCTION__ << tr ("FFT of data, elapsed time %1").arg (fftTime->elapsed ()/1.0e3);
        for (int ii=0; ii<nd; ii++)
        {
            double re = real (stc4[ii])*nd;
            double im = imag (stc4[ii])*nd;
            stc4[ii] = complex<double> (re, im);
            if (i0==0)
                stCont << re << (im >= 0 ? "+" : " ") << im << "i" << endl;
        }

        for (int ii=0; ii<nd; ii++)
        {
            double rstc4 = real (stc4[ii])/nd;
            double imstc4 = imag (stc4[ii])/nd;
            double ropor = real (opor[ii]);
            double imopor = imag (opor[ii]);
            complex<double> res = complex<double> ((rstc4 * ropor - imstc4*imopor), (rstc4*imopor+imstc4*ropor));
            stc1[ii] = res;//stc4[i]*opor[i];///(nd*nd);
        }
        delete [] stc4;

        complex<double> * xfft = 0;//new complex<double> [nd];
        //qDebug () << __PRETTY_FUNCTION__ << QString ("Reverse fft");
        xfft = fft (stc1, nd, nd, FFTW_BACKWARD, FFTW_ESTIMATE );//| FFTW_MEASURE);
        //delete [] xConv;
        double * stc2 = new double [2*nd];
        //double * stc2abs = new double [nd];
        for (int ii=0; ii<nd; ii++)
        {
            int ind = ii;//(ii==0 ? nd-1 : ii-1);
            stc2[2*ii] = real (xfft[ind])/nd;//stc3[i]);
            stc2[2*ii+1] = imag (xfft[ind])/nd;
            double vmod = sqrt (stc2[2*ii]*stc2[2*ii] + stc2[2*ii+1]*stc2[2*ii+1]);
            maxval = qMax (maxval, vmod);
        }
        if (fid6)
        {
            //qDebug () << __PRETTY_FUNCTION__ << QString ("Write data");
            size_t h = fwrite (stc2, sizeof (double)/2, 2*nd, fid6);
            int ier = ferror (fid6);
            //qDebug () << __PRETTY_FUNCTION__ << QString ("Data were written %1 bytes, error indicator =%2 ").arg (h).arg(ier);
            if (h ==0 || ier)
            {
                qDebug () << __PRETTY_FUNCTION__ << tr ("Write error, code=%1").arg (ier);
                return;
            }
        }
        delete [] xfft;

        //delete [] stc2abs;
        delete [] stc2;
    }
    delete cop;
    if (fid6)
        fclose (fid6);
    mFile.unlock();
    fid6 = fileConvName.isEmpty() ? 0 : fopen (fileConvName.toAscii().constData(), "r+");
    qDebug () << __PRETTY_FUNCTION__ << maxval;
    if (fid6)
    {
        double * vals = new double [nd];
        int * nums = new int [nd];
        for (int i=0; i<nd; i++)
        {
            vals[i] = 0.0;
            nums[i] = 0;
        }

        for (int i0 = 0; i0 < FFT_Transform::pow2roundup(na/50); i0++)
        {
            for (int i=0; i<50; i++)
            {
                double * stc2c = new double [2*nd];
                size_t h = fread (stc2c, sizeof (double)/2, 2*nd, fid6);
                //qDebug () << __PRETTY_FUNCTION__ << h;
                if (h > 0)
                {
                    for (int ii=0; ii<nd; ii++)
                    {
                        vals [ii] += sqrt (stc2c[2*ii]*stc2c[2*ii] + stc2c[2*ii+1]*stc2c[2*ii+1]);
                        nums[ii]++;
                    }
                }
                delete [] stc2c;
            }
            for (int ii=0; ii<nd; ii++)
            {
                double vmod = vals[ii]/nums[ii];//sqrt (stc2c[2*ii]*stc2c[2*ii] + stc2c[2*ii+1]*stc2c[2*ii+1]);
                
                double gray = (vmod/maxval)*convParameters->getNCalibration();
                //vals [(i0+1)%50+ii] = gray;
                //if ((i0+1)/50*50 == i0+1)
                //{
                //    double gray_ave (0.0);
                //    for (int iii=0; iii<50; iii++)
                //        gray_ave += vals [iii];
                uint val = (uint)(256*(gray));

                QRgb v = qRgb (val, val, val);
                convImage->setPixel (ii, i0, v);//qRgb(val, val, val));
                //}
            }
        }
        delete [] vals;
    }
    fftw_cleanup_threads ();
    //delete [] vals;
    qDebug () << __PRETTY_FUNCTION__ << QString ("Data were read and processed");
    fContData.close();
//    double * stc2abs = new double [nd];
    qDebug () << __PRETTY_FUNCTION__ << convImage->size () << imSize;
    QString fileImageName = QString ("rgg.png");
    convImage->save (fileImageName, "PNG");
    //rggImageWidget * imW = new rggImageWidget;
    //imW->setImage (*convImage);
    //emit sendWidget (imW, this);
    emit sendImage (convImage);
    int msecs = fftTime->elapsed ();
    emit sendTime (msecs);
    delete fftTime;

    delete [] stc1;
    delete [] st;
//    exec();
}
Пример #22
0
void TcpController::sendImagePixel(Imagem image, int qtd)
{
    sendImageNotProcess(image.frameNotProcess);
    sendImage(image.frame,qtd,PORT_IMAGE_PIXEL);
}
Пример #23
0
gNodeComponentWidget::gNodeComponentWidget(sJarvisNodeComponent* comp,QWidget *parent) :
    QGroupBox(parent), m_component(comp),
    ui(new Ui::gNodeComponentWidget)
{
    ui->setupUi(this);

    this->setTitle(m_component->getId());

    QList<jarvisActions> actions = m_component->getActions();
    for(int i = 0 ; i < actions.count() ; i++)
    {
        jarvisActions action = actions[i];
        //qDebug() << QString::number(int(action));
        QToolButton* b = new QToolButton(ui->actionsBox);
        QGridLayout* l = (QGridLayout*)ui->actionsBox->layout();

        if      (action == A_DIMM){
            b->deleteLater();
            QSlider* w = new QSlider(this);
            w->setMaximum(100);
            w->setValue(50);
            l->addWidget(w,l->count()/2,l->count()%2);
            connect(w,SIGNAL(valueChanged(int)),m_component,SLOT(dimm(int)));

        }else if(action == A_SET_COLOR){
            connect(b,SIGNAL(clicked()),this,SLOT(selectComponentColor()));
            b->setText(m_component->actionName((m_component->getActions()[i])));
            l->addWidget(b,l->count()/2,l->count()%2);

        }else if(action == A_SET_LEDS){
            connect(b,SIGNAL(clicked()),this,SLOT(sendImage()));
            b->setText(m_component->actionName((m_component->getActions()[i])));
            l->addWidget(b,l->count()/2,l->count()%2);

        }else if(action == A_DISPLAY){
            connect(b,SIGNAL(clicked()),this,SLOT(sendImage()));
            b->setText(m_component->actionName((m_component->getActions()[i])));
            l->addWidget(b,l->count()/2,l->count()%2);
        }else if(action == A_PLAYRTTTL){
            connect(b,SIGNAL(clicked()),this,SLOT(openRtttlPlayer()));
            b->setText(m_component->actionName((m_component->getActions()[i])));
            l->addWidget(b,l->count()/2,l->count()%2);
        }else{
            QString slotName = m_component->slotName(m_component->getActions()[i]);
            b->setText(m_component->actionName((m_component->getActions()[i])));
            l->addWidget(b,l->count()/2,l->count()%2);
            connect(b,SIGNAL(clicked()),m_component,slotName.toStdString().c_str());
        }
    }

    QList<jarvisEvents> events = m_component->getCapableEvents();
    for(int i = 0 ; i < events.count() ; i++)
    {
        gBlinkWidget* w = new gBlinkWidget(ui->eventsBox);
        QLabel* label = new QLabel(ui->eventsBox);
        QGridLayout* l = (QGridLayout*)ui->eventsBox->layout();
        l->addWidget(label,i,0);
        l->addWidget(w,i,1);
        w->setMaximumHeight(50);
        if(events[i] == E_RAW_READ)
        {
            connect(m_component,SIGNAL(rawRead()),w,SLOT(blink()));
            connect(m_component,SIGNAL(rawRead(QStringList)),w,SLOT(displayRead(QStringList)));
            label->setText(m_component->eventName((m_component->getCapableEvents()[i])));

        }else if(events[i] == E_DATA_READ)
        {
            connect(m_component,SIGNAL(dataRead()),w,SLOT(blink()));
            connect(m_component,SIGNAL(dataRead(QStringList)),w,SLOT(displayRead(QStringList)));
            label->setText(m_component->eventName((m_component->getCapableEvents()[i])));

        }else
        {
            QString signalName = m_component->signalName(m_component->getCapableEvents()[i]);
            label->setText(m_component->eventName((m_component->getCapableEvents()[i])));
            connect(m_component,signalName.toStdString().c_str(),w,SLOT(blink()));
        }
        //w->setMinimumSize(32,32);
        //w->setMaximumSize(32,32);
    }
}