예제 #1
0
cv::Scalar colorLevel(int index, hsv::Levels levels) {
    // TODO move these outside and pass as arguments?
    int numColors = levels[0] * levels[1] * levels[2];
    int numGrays = levels[2] + 1;
    arma::ivec grays = arma::linspace<arma::ivec>(1, 256, numGrays);

    if (index > numColors - 1) { // grays
        int level = index - numColors;
        int value = grays(level) - 1;
        return cv::Scalar(value, value, value);
    }
    else { // colors
        hsv::Levels indices = ind2sub(levels, index);

        cv::Vec3f temp;
        for (int i = 0; i < 3; i++) {
            temp[i] = static_cast<float>(indices[i] + 1) / levels[i];
            BOOST_ASSERT(temp[i] >= 0. and temp[i] <= 1.);
        }
        temp[0] *= 360.;

        cv::Mat bgr(1, 1, CV_32FC3);
        bgr.at<cv::Vec3f>(0) = temp;

        cv::cvtColor(bgr, bgr, CV_HSV2BGR);

        cv::Vec3f& val = bgr.at<cv::Vec3f>(0);
        val *= 255.;

        return cv::Scalar(val[0], val[1], val[2]);
    }
}
예제 #2
0
파일: bg_test.cpp 프로젝트: sim82/c_tools
int main() {
    const size_t bufsize = 1024 * 1024 * 1;
    
    fpga_con_t con;
    
    fpga_con_init( &con, "131.159.28.113", 12340, 12350 );
    
    bg_reader bgr( con.s );
//     bg_reader bgr2( con.s );
    char buf[4];
    
    fpga_con_send( &con, buf, 4 );
    
    const size_t rbuf_size = 10 * 1024;
    char rbuf[rbuf_size];
//     while( true ) {
// 	
// 	
// 	//size_t s = bgr.readPacket( rbuf, rbuf_size );
// 	
// 	//printf( "recv size: %zd\n", s );
// 	
// 	if( s < 1024 ) {
// 	    break;
// 	}
// 	
//     }

    bgr.join();
//     bgr2.join();
}
예제 #3
0
void Image::saveTGA(std::string const& path, float gamma) const
{
    // Convert float RGBA to uint8 BGR.
    std::vector<std::uint8_t> bgr(m_pixels.size() * 3);
    for (std::size_t i = 0; i < m_pixels.size(); ++i)
    {
        std::size_t const idx = i * 3;
        for (int c = 0; c < 3; ++c)
        {
            float const gamma_corrected = std::pow(m_pixels[i][2-c], 1.f / gamma);
            float const mapped          = std::max<float>(0.0f, std::min<float>(255.0f, 255.f * gamma_corrected));
            bgr[idx+c]                  = uint8_t(mapped);
        }
    }

    TgaHeader header;
    header.size[0] = m_width;
    header.size[1] = m_height;

    std::ofstream f(path.c_str(), std::ios::binary);
    if (!f)
    {
        std::cerr << "Cannot write image to '" << path << "'." << std::endl;
        return;
    }

    f.write(reinterpret_cast<char const*>(&header), sizeof(header));
    f.write(reinterpret_cast<char const*>(bgr.data()), bgr.size());
}
예제 #4
0
fixed
OrderedTask::CalcRequiredGlide(const AircraftState &aircraft,
                               const GlidePolar &glide_polar) const
{
  TaskGlideRequired bgr(task_points, active_task_point, aircraft,
                        task_behaviour.glide, glide_polar);
  return bgr.search(fixed_zero);
}
예제 #5
0
fixed 
UnorderedTask::CalcRequiredGlide(const AircraftState &aircraft) const
{
  TaskPoint *tp = GetActiveTaskPoint();
  if (!tp) {
    return fixed_zero;
  }
  TaskGlideRequired bgr(tp, aircraft, glide_polar);
  return bgr.search(fixed_zero);
}
예제 #6
0
fixed
UnorderedTask::CalcRequiredGlide(const AircraftState &aircraft,
                                 const GlidePolar &glide_polar) const
{
  TaskPoint *tp = GetActiveTaskPoint();
  if (tp == nullptr || !aircraft.location.IsValid())
    return fixed(0);

  TaskGlideRequired bgr(tp, aircraft, task_behaviour.glide, glide_polar);
  return bgr.search(fixed(0));
}
예제 #7
0
파일: Color.hpp 프로젝트: HakubJozak/gosu
 //! Returns the color in 0xaabbggrr representation.
 boost::uint32_t abgr() const
 {
     return alpha() << 24 | bgr();
 }
예제 #8
0
파일: gensom.cpp 프로젝트: ajaskier/gerbil
void GenSOM::train(const multi_img &input, ProgressObserver *po)
{
	std::cout << "Start feeding" << std::endl;

	// matrices hold shuffled sequences of the input for number of iterations
	int maxIter = config.maxIter;
	cv::Mat_<int> shuffledY(1, maxIter);
	cv::Mat_<int> shuffledX(1, maxIter);

	// generate random sequence of the input x,y range
	cv::RNG rng(config.seed);
	rng.fill(shuffledY, cv::RNG::UNIFORM,
			 cv::Scalar(0), cv::Scalar(input.height));
	rng.fill(shuffledX, cv::RNG::UNIFORM,
			 cv::Scalar(0), cv::Scalar(input.width));

	// output percentage
	unsigned int hundred = std::max<unsigned int>(maxIter/100, 100);
	int percent = 1;
	if (config.verbosity > 0) {
		std::cout << "  0 %";
		std::cout.flush();
	}
	long sumOfUpdates = 0;

	// starting training (notifier needed by OpenCL impl.)
	notifyTrainingStart();

	cv::MatConstIterator_<int> itY = shuffledY.begin();
	cv::MatConstIterator_<int> itX = shuffledX.begin();
	for (int curIter = 0; curIter < maxIter; ++curIter, ++itX, ++itY)
	{
		// feed one sample
		const multi_img::Pixel &vec = input(*itY, *itX);
		sumOfUpdates += trainSingle(vec, curIter, maxIter);

		// print progress (and maybe exit)
		if ((config.verbosity > 0 || po) && (config.maxIter > 100)
			&& ((curIter % hundred) == 0) && (percent < 100)) {

			// send progress updates to observer or stdout
			if (po) {
				bool cont = po->update(curIter / (float)config.maxIter);
				if (!cont) {
					std::cerr << "Aborting training" << std::endl;
					return;
				}
			} else {
				std::cout << "\r " << (percent < 10 ? " " : "")
						  << percent << " %";
				std::cout.flush();
			}
			if (config.verbosity >= 2) {
				std::cout << " Feed #" << curIter
						  << ", avg. updates per iteration in the last "
						  << (maxIter / hundred) << " iterations: "
						  << ((double)sumOfUpdates / hundred)
						  << std::endl;
				sumOfUpdates = 0;
			}

			// print som each 20%
			if (config.verbosity >= 3 && (percent % 20) == 0)
			{
				// TODO
				/*multi_img somimg = som->export_2d();
				std::ostringstream filename, filename2;
				filename << "debug_som_";
				filename << std::setfill('0') << std::setw(2);
				filename << (ctr / (config.maxIter / 20));
				somimg.write_out(filename.str());
				filename2 << filename.str();

				filename << "-rgb.png";
				cv::imwrite(filename.str(), somimg.bgr() * 255.f);

				if (!updateMap.empty()) {
					cv::Mat3f upBGR(updateMap.rows, updateMap.cols);
					cv::cvtColor(updateMap, upBGR, CV_GRAY2BGR);
					for (cv::Mat3f::iterator it = upBGR.begin(); it != upBGR.end();++it)
						if (*it == cv::Vec3f(0.f))
							*it = cv::Vec3f(0.f, 0.f, 1.f);

					filename2 << "-updates.png";
					cv::imwrite(filename2.str(), upBGR * 255.f);
				}*/
			}

			percent++;
		}
	}
	if (config.verbosity > 0)
		std::cout << "\r100 %" <<std::endl;

	// finished training (notifier needed by OpenCL impl.)
	notifyTrainingEnd();

	std::cout <<"# Feeding done" <<std::endl;

	if (!config.somFile.empty()) {
		std::cout << "# writing SOM in binary format to \""
				  << config.somFile << "\"" << std::endl;
		saveFile(config.somFile);
	}
    if (config.verbosity > 2) {
        cv::imwrite("debug_som.png", bgr(input.meta, input.maxval)*255.f);
    }
 }