Ejemplo n.º 1
0
/* 按连通域分割图像
 * image 图像数据
 * i 寻找第一个不为0的点时寻找起始点所在行(寻找方向从左向右,从上向下)
 * j 寻找第一个不为0的点时寻找起始点所在列(寻找方向从左向右,从上向下)
 * imgSpArr 分离出的连通域数组
 */
void splitImage(IplImage* image, int i, int j, ImageSplitArray* imgSpArr)
{
	int ii, ji;
	for(ii=i; ii<image->height; ii++)
	{
		for(ji=j; ji<image->width; ji++)
		{
			if(image->imageData[ii*image->widthStep+ji] != 0)
				break;
		}
		j=0;
		if(ji < image->width && image->imageData[ii*image->widthStep+ji] != 0)
			break;
	}
	if(ii<image->height && ji<image->width)
	{
		PointsArray poiArr = {64, 0, (int(*)[2]) malloc (64*sizeof(int[2])), image->height, image->width, 0, 0}; //点(i,j)8邻域中的非零点所在行和列
		PointsArray* ijs = &poiArr;
		ijs->pointArray[ijs->count][0] = ii;
		ijs->pointArray[ijs->count][1] = ji;
		image->imageData[ii*image->widthStep+ji] = 0;
		ijs->minI > ijs->pointArray[ijs->count][0] ? ijs->minI = ijs->pointArray[ijs->count][0] : ijs->minI = ijs->minI;
		ijs->minJ > ijs->pointArray[ijs->count][1] ? ijs->minJ = ijs->pointArray[ijs->count][1] : ijs->minJ = ijs->minJ;
		ijs->maxI < ijs->pointArray[ijs->count][0] ? ijs->maxI = ijs->pointArray[ijs->count][0] : ijs->maxI = ijs->maxI;
		ijs->maxJ < ijs->pointArray[ijs->count][1] ? ijs->maxJ = ijs->pointArray[ijs->count][1] : ijs->maxJ = ijs->maxJ;
		++(ijs->count);
		findConnection(image, ijs, ii, ji);

		/*****如果imgSpArr内存不够,则将结构体数组长度+10*****/
		if(imgSpArr->count >= imgSpArr->length)
		{
			imgSpArr->length += 10;
			ImageCon* tempImgCons = (ImageCon*)malloc(sizeof(ImageCon) * imgSpArr->length);
			for(int m=0; m<imgSpArr->count; m++)
			{
				ImageCon tempImgCon = {cvCreateImage(cvGetSize(imgSpArr->imgCons[m].img), imgSpArr->imgCons[m].img->depth, imgSpArr->imgCons[m].img->nChannels), imgSpArr->imgCons[m].minI, imgSpArr->imgCons[m].minJ, imgSpArr->imgCons[m].maxI, imgSpArr->imgCons[m].maxJ, imgSpArr->imgCons[m].aspectRatio, 0, 0};
				tempImgCons[m] = tempImgCon;
				cvCopy(imgSpArr->imgCons[m].img, tempImgCons[m].img, NULL);
				cvReleaseImage(&(imgSpArr->imgCons[m].img));
			}
			free(imgSpArr->imgCons);
			imgSpArr->imgCons = tempImgCons;
		}
		//imagesSplit[imagesSplit->count] = cvCreateImage(cvSize(image->width,image->height), image->depth, image->nChannels);
	    ImageCon imgCon = {cvCreateImage(cvSize(ijs->maxJ-ijs->minJ+1, ijs->maxI-ijs->minI+1), image->depth, image->nChannels), ijs->minI, ijs->minJ, ijs->maxI, ijs->maxJ, 0.0f, 0, 0};
		imgSpArr->imgCons[imgSpArr->count] = imgCon;
		cvZero(imgSpArr->imgCons[imgSpArr->count].img);
		imgSpArr->imgCons[imgSpArr->count].aspectRatio = (float)(ijs->maxI-ijs->minI+1) / (float)(ijs->maxJ-ijs->minJ+1);
		for(int m=0; m<ijs->count; m++)
			imgSpArr->imgCons[imgSpArr->count].img->imageData[(ijs->pointArray[m][0]-ijs->minI)*imgSpArr->imgCons[imgSpArr->count].img->widthStep+(ijs->pointArray[m][1]-ijs->minJ)] = (char)255;
		(imgSpArr->count)++;
		free(ijs->pointArray);
		//(*foregroundCounts)-=ijs->count;
		splitImage(image, ii, ji, imgSpArr);
	}
}
Ejemplo n.º 2
0
StatWidget::StatWidget(const Game& rb):
    iRow(0),
    rb(rb) {
    setupUi(this);
    QImage wset( ":/setwhite.png" );
    splitImage( wPieces, wset );
    QImage bset( ":/setblack.png" );
    splitImage( bPieces, bset );
    QFont fixed;
    fixed.setFamily("Consolas");
    bestLine->setFont(fixed);

    for (int i=0; i<256; i++) {
        pal[i] = QColor::fromHsvF(std::fmod(1.3-i/300.0, 1.0), 1.0, 1.0); }

    minipm[0][Rook] = ww1;
    minipm[0][Bishop] = ww2;
    minipm[0][Queen] = ww3;
    minipm[0][Knight] = ww4;
    minipm[0][Pawn] = ww5;
    minipm[0][King] = ww6;

    minipm[1][Rook] = wb1;
    minipm[1][Bishop] = wb2;
    minipm[1][Queen] = wb3;
    minipm[1][Knight] = wb4;
    minipm[1][Pawn] = wb5;
    minipm[1][King] = wb6;

    tree = new NodeModel(this);
    treeView->setModel( tree );

    NodeDelegate* delegate = new NodeDelegate;
    treeView->setItemDelegate( delegate );

    QTimer* t = new QTimer(this);
    connect(t, SIGNAL(timeout()), this, SLOT(update()));
    qRegisterMetaType<uint64_t>("uint64_t");
    connect(&rb, SIGNAL(signalInfo(int, uint64_t, uint64_t, QString, QString)),
            this,       SLOT  (updateInfo(int, uint64_t, uint64_t, QString, QString)));
    t->setInterval(1000);
    t->start(); }
Ejemplo n.º 3
0
/*
img	input image
return	output image
*/
Mat Dip1::doSomethingThatMyTutorIsGonnaLike(Mat& img){

  	Mat newImg = img.clone();
  	
  	splitImage(newImg, 0);
  	splitImage(newImg, 3);	

	//increase image contrast 
	/// Do the operation new_image(i,j) = alpha*image(i,j) + beta
	float alpha = 1.2;
	int beta = 50;
	for( int y = 0; y < newImg.rows; y++ ){
		for( int x = 0; x < newImg.cols; x++ ){ 
			for( int c = 0; c < 3; c++ ){
				newImg.at<Vec3b>(y,x)[c] = saturate_cast<uchar>( alpha*( newImg.at<Vec3b>(y,x)[c] ) + beta ); 
			}
		}
	}

  	return newImg;
}
Ejemplo n.º 4
0
int main()
{
    QString folder("C:\\Users\\Gigotdarnaud\\Desktop\\CircleTexturesHD");
    QString outFolder("C:\\Users\\Gigotdarnaud\\Desktop\\CircleTexturesHD\\OUT");

    QDir dir (folder);
    QStringList filters; filters << "*.bmp" << "*.png" << "*.jpg" << "*.tiff";
    QStringList ls=dir.entryList(filters, QDir::Files|QDir::NoDotAndDotDot);

    QFile file(outFolder+'/'+"filelist.list");
    file.open(QIODevice::WriteOnly|QIODevice::Text);
    QTextStream tstr(&file);

    int c=0;
    for(int i=0, m=ls.size();i<m;++i)
    {
        c+=splitImage(folder+'/'+ls[i], outFolder, tstr,c);
    }

    return 0;
}