Exemple #1
0
void imageCallback(const sensor_msgs::ImageConstPtr& msg)
{
    try
    {
        Mat3b image  = cv_bridge::toCvShare(msg, "bgr8")->image;
        Mat3b result = yaed.Onvideotracking(image);
        loc=yaed.locations();
        //ROS_INFO("location: %d,%d",loc.xaxis,loc.yaxis);

        //geometry_msgs::Point point;
        detecter::CircleTarget target;
        target.tar.x=loc.xaxis;
        target.tar.y=loc.yaxis;
        target.image_height = image.size().height;
        target.image_width  = image.size().width;
        if(target.tar.x!=0&&target.tar.y!=0)
            ppb->publish(target);


        sensor_msgs::ImagePtr imagemsg;
        imagemsg = cv_bridge::CvImage(std_msgs::Header(), "bgr8", result).toImageMsg();
        ppub->publish(imagemsg);

    }
    catch (cv_bridge::Exception& e)
    {
        ROS_ERROR("Could not convert from '%s' to 'bgr8'.", msg->encoding.c_str());
    }
}
Exemple #2
0
vpx_image Camera::getLastVPXImage()
{
    Mat3b frame = getLastFrame();
    vpx_image img;
    int w = frame.size().width, h = frame.size().height;
    vpx_img_alloc(&img, VPX_IMG_FMT_I420, w, h, 1); // I420 == YUV420P, same as YV12 with U and V switched

    size_t i=0, j=0;
    for( int line = 0; line < h; ++line )
    {
        const cv::Vec3b *srcrow = frame[line];
        if( !(line % 2) )
        {
            for( int x = 0; x < w; x += 2 )
            {
                uint8_t r = srcrow[x][2];
                uint8_t g = srcrow[x][1];
                uint8_t b = srcrow[x][0];

                img.planes[VPX_PLANE_Y][i] = ((66*r + 129*g + 25*b) >> 8) + 16;
                img.planes[VPX_PLANE_V][j] = ((-38*r + -74*g + 112*b) >> 8) + 128;
                img.planes[VPX_PLANE_U][j] = ((112*r + -94*g + -18*b) >> 8) + 128;
                i++;
                j++;

                r = srcrow[x+1][2];
                g = srcrow[x+1][1];
                b = srcrow[x+1][0];
                img.planes[VPX_PLANE_Y][i] = ((66*r + 129*g + 25*b) >> 8) + 16;
                i++;
            }
        }
        else
        {
            for( int x = 0; x < w; x += 1 )
            {
                uint8_t r = srcrow[x][2];
                uint8_t g = srcrow[x][1];
                uint8_t b = srcrow[x][0];

                img.planes[VPX_PLANE_Y][i] = ((66*r + 129*g + 25*b) >> 8) + 16;
                i++;
            }
        }
    }
int main(int argc, char **argv)
{
	if (argc != 3)
	{
		fprintf(stdout, "usage: %s inputImageName threshNum\n", argv[0]);
		return -1;
	}
	string name(argv[1]);
	int thresh = atoi(argv[2]);

	Mat3b src = cvLoadImage(argv[1]);
	show_mat(src);

	Mat3b frame = src.clone();
	floodFill(frame, Point(1,1),Scalar(0,0,0), NULL, Scalar::all(thresh), Scalar::all(thresh));
	show_mat(frame);

	Mat1b gray;
	vGrayScale(frame, gray);

	// Create mat with alpha channel
	cv::Mat4b dst(src.size());

	for (int j = 0; j < dst.rows; ++j) 
	{
		for (int i = 0; i < dst.cols; ++i)
		{
			cv::Vec4b& rgba = dst(j, i);
			cv::Vec3b& rgb = src(j, i); 
			rgba[0] = rgb[0];
			rgba[1] = rgb[1];
			rgba[2] = rgb[2];
			if (gray(j,i) > 0)
				rgba[3] = 255;
			else
				rgba[3] = 0;
		}
	}

	try {
		std::vector<int> params;
		params.push_back(CV_IMWRITE_PNG_COMPRESSION);
		params.push_back(9);
		cvSaveImage(string(name+".png").c_str(), &(IplImage)dst, &params[0]);
	}
	catch (std::runtime_error& ex) {
		fprintf(stderr, "Exception converting image to PNG format: %s\n", ex.what());
		return 1;
	}

	fprintf(stdout, "Saved PNG file with alpha data.\n");

	waitKey();
}
Exemple #4
0
Mat1b Nieto::filtro(const Mat3b &inColorFrame, int tauInicio, int tauFim, int thres) {
	double tempoInicio = static_cast<double>(getTickCount());

	Mat1b outBinaryFrameFiltrado = Mat1b(inColorFrame.size());
	// converte para cinza
	cvtColor(inColorFrame, outBinaryFrameFiltrado, CV_BGR2GRAY);
	// aplica o filtro do Nieto
	nietoLaneMarkingsDetector(outBinaryFrameFiltrado, outBinaryFrameFiltrado, tauInicio, tauFim);
	// aplica o threshold na imagem filtrada
	threshold(outBinaryFrameFiltrado, outBinaryFrameFiltrado, thres, 255, CV_THRESH_BINARY);

	// calcula o tempo de execu��o
	double tempoFim = static_cast<double>(getTickCount());
	double tempoExecutando = ((tempoFim - tempoInicio) / getTickFrequency()) * 1000;

	// exibe as sa�das definidas (texto e/ou imagem)
	if (verbose) cout << "- nieto.filtro: " << tempoExecutando << " ms" << endl;

	return outBinaryFrameFiltrado;
}
int main(int argc, char** argv)
{
   if(argc != 2){
	cout<<"Provide input image";
        return 0;
   }

    // Read image
    Mat3b img = imread(argv[1]);

    // Binarize image. Text is white, background is black
    Mat1b bin;
    cvtColor(img, bin, COLOR_BGR2GRAY);
    bin = bin < 200;

    // Rotate the image according to the found angle
    Mat1b rotated;
    bin.copyTo(rotated);

   // Mat M = getRotationMatrix2D(box.center, box.angle, 1.0);    //warpAffine(bin, rotated, M, bin.size());

    // Compute horizontal projections
    Mat1f horProj;
    reduce(rotated, horProj, 1, CV_REDUCE_AVG);

    // Remove noise in histogram. White bins identify space lines, black bins identify text lines
    float th = 0;
    Mat1b hist = horProj <= th;

    // Get mean coordinate of white pixels groups
    vector<int> ycoords;
    int y = 0;
    int count = 0;
    bool isSpace = false;
    for (int i = 0; i < rotated.rows; ++i)
    {
        if (!isSpace)
        {
            if (hist(i))
            {
                isSpace = true;
                count = 1;
                y = i;
            }
        }
        else
        {
            if (!hist(i))
            {
                isSpace = false;
                ycoords.push_back(y / count);
            }
            else
            {
                y += i;
                count++;
            }
        }
    }
    // Draw line as final result
    Mat3b result;
    cvtColor(rotated, result, COLOR_GRAY2BGR);

if(ycoords.size()>0){
    for (int i = 0; i < ycoords.size()-1; i++)
    {
	Rect rect1;
	rect1.x = 0;
	rect1.y = ycoords[i];
	rect1.width = result.size().width;
	rect1.height = ycoords[i+1]-ycoords[i];
        if(rect1.height > 30){
		Mat Image1 = result(rect1);
		imshow("Display Image", Image1); 
		string name = "";
		std::stringstream ss; 
		ss << i;
		name = "Image"+ss.str()+".jpg";
		imwrite(name,Image1);
		waitKey(0);
        }
	if(i == ycoords.size()-2){
		Rect rect1;
		rect1.x = 0;
		rect1.y = ycoords[i+1];
		rect1.width = result.size().width;
		rect1.height = result.size().height-ycoords[i+1];
		if(rect1.height > 30){
			Mat Image1 = result(rect1);
			imshow("Display Image", Image1); 
			string name = "";
			std::stringstream ss; 
			ss << i+1;
			name = "Image"+ss.str()+".jpg";
			imwrite(name,Image1);
			waitKey(0);
		}	
	}
    }
}
else
   cout<<"No coordinates formed";
   return 0;
}