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()); } }
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, ¶ms[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(); }
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; }