コード例 #1
0
ファイル: main.cpp プロジェクト: CoActionOS/CoActionOS-Apps
int main(int argc, char * argv[]){

	printf("Hello Xively Board\n");
	Controller::init();
	sketch();
	return 0;
}
コード例 #2
0
ファイル: sketchrecognizer.cpp プロジェクト: 1024kb1/opensse
void SketchRecognizer::readSketchsMat(const std::string &sketchs, cv::Mat &sketchsMat)
{
    std::ifstream sketchs_in(sketchs.c_str());
    uint sketchsize = 0;
    sketchs_in >> sketchsize;
    uint vocabularySize = 0;
    sketchs_in >> vocabularySize;

    Vec_f32_t sketch(vocabularySize);
    for(uint i = 0; i < sketchsize; i++) {

        cv::Mat temp = cv::Mat::zeros(1, vocabularySize, CV_32FC1);
        for(uint j = 0; j < vocabularySize; j++) {
            sketchs_in >> temp.at<float>(0, j);
        }
        sketchsMat.push_back(temp);
        std::cout << "read sketchs " << i <<"/" << sketchsize << "\r" <<std::flush;
    }
    std::cout << "read sketchs " << sketchsize <<"/" << sketchsize << "\n" <<std::flush;
    sketchs_in.close();
}
コード例 #3
0
ファイル: GLWidget3D.cpp プロジェクト: gnishida/ShapeMatching
void GLWidget3D::findMatchingRule() {
	/*
	shapeFeatures.clear();
	
	char filenames[][255] = {"simpleMass.xml", "LshapeMass.xml"};

	// load features from files
	QDir dir("features");
	QStringList filters;
	filters << "*.jpg";
	QFileInfoList fileInfoList = dir.entryInfoList(filters, QDir::Files|QDir::NoDotAndDotDot);
	for (int i = 0; i < fileInfoList.size(); ++i) {
		QStringList list = fileInfoList[i].baseName().split("_");
		int fi = list[0].toInt();
		int si = list[1].toInt();
		int pitch_angle = list[2].toInt();
		int yaw_angle = list[3].toInt();
		cv::Mat img = cv::imread(fileInfoList[i].absoluteFilePath().toUtf8().constData(), CV_LOAD_IMAGE_GRAYSCALE);

		shapeFeatures.resize(fi + 1);

		std::map<std::string, std::string> attrs;
		if (fi == 0) {
			attrs["bldg_height"] = boost::lexical_cast<std::string>(40);
		} else {
			attrs["bldg_height"] = boost::lexical_cast<std::string>(40);
			attrs["bldg_height_lower_ratio"] = boost::lexical_cast<std::string>((int)(si / 5) * 0.1 + 0.3);
			attrs["bldg_upper_width_ratio"] = boost::lexical_cast<std::string>((int)(si % 5) * 0.1 + 0.3);
		}


		shapeFeatures[fi].push_back(ShapeFeature(pitch_angle, yaw_angle, img, "../cga/" + std::string(filenames[fi]), attrs));

	}

	std::cout << "load done." << std::endl;
	*/

	// create QImage object of the sketch
	QImage sketch(QSize(width(), height()), QImage::Format_RGB888);
	sketch.fill(QColor(255, 255, 255));

	QPainter painter;
	painter.begin(&sketch);
	painter.setPen(QPen(QColor(0, 0, 0)));
	for (int i = 0; i < strokes.size(); ++i) {
		for (int k = 0; k < strokes[i].points.size() - 1; ++k) {
			painter.drawLine(strokes[i].points[k].x, strokes[i].points[k].y, strokes[i].points[k+1].x, strokes[i].points[k+1].y);
		}
	}
	painter.end();

	//sketch.save("tet.jpg");

	cv::Mat matSketch(sketch.height(), sketch.width(), CV_8UC3, const_cast<uchar*>(sketch.bits()), sketch.bytesPerLine());

	// convert the sketch to grayscale
	cv::cvtColor(matSketch, matSketch, CV_BGR2GRAY);

	// blur the sketch
	cv::GaussianBlur(matSketch, matSketch, cv::Size(11, 11), 11, 11);

	// conver the sketch to mono color
	cv::threshold(matSketch, matSketch, 253, 255, 0);

	// rectangle
	cv::Rect roi = cvutils::computeBoundingBoxFromImage(matSketch);
	cv::Mat matSketch2;
	matSketch(roi).copyTo(matSketch2);

	cv::resize(matSketch2, matSketch2, cv::Size(matSketch2.cols * 0.2, matSketch2.rows * 0.2));

	cv::imwrite("test_sketch.jpg", matSketch2);


	//
	// compare the sketch with the shape features extracted from the CGA grammars
	float min_diff = std::numeric_limits<float>::max();
	ShapeFeature min_sf;

	for (int i = 0; i < shapeFeatures.size(); ++i) {
		cv::Mat shapeMat2;
		cv::resize(shapeFeatures[i].image, shapeMat2, matSketch2.size());

		cv::Mat matDiff;
		cv::absdiff(shapeMat2, matSketch2, matDiff);
		float diff = cvutils::mat_sum(matDiff);// / cvutils::mat_sum(shapeMat2);

		if (diff < min_diff) {
			min_diff = diff;
			min_sf = shapeFeatures[i];
		}
	}

	cv::imwrite("test_matched.jpg", min_sf.image);



	renderManager.removeObjects();

	std::vector<Vertex> vertices;
	glm::mat4 mat = glm::translate(glm::mat4(), glm::vec3(0, -1, 0));
	mat = glm::rotate(mat, (float)(-M_PI * 0.5f), glm::vec3(1, 0, 0));
	glutils::drawGrid(100, 100, 2, glm::vec4(0.7, 0.7, 0.7, 1), glm::vec4(1, 1, 1, 1), mat, vertices);

	renderManager.addObject("grid", "", vertices);


	try {
		cga::parseRules(min_sf.cga_filename, cga_system.ruleSet);

		// set parameter values
		for (auto it = min_sf.attrs.begin(); it != min_sf.attrs.end(); ++it) {
			cga_system.ruleSet.attrs[it->first] = it->second;
		}

		cga_system.generate();
		cga_system.render(&renderManager, true);
	} catch (const char* ex) {
		std::cout << "ERROR:" << std::endl << ex << std::endl;
	}

	camera.yrot = min_sf.yaw_angle;
	camera.xrot = min_sf.pitch_angle;
	camera.pos.z = 100;
	camera.updateMVPMatrix();

	update();
}