Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Libs de opencv necessarias
- #include <opencv2/imgproc/imgproc.hpp>
- #include <opencv2/highgui/highgui.hpp>
- // Lib com tudo que eh necessario
- #include <bits/stdc++.h>
- // Usando namespace std e cv
- using namespace std;
- using namespace cv;
- // Quantidade de imagens para ler
- #define IMG_QTD 1
- #define SHOWSTEPS true
- #define SAVEREGIONS true
- //#define SAVEFILE 1
- string type2str(int type) {
- string r;
- uchar depth = type & CV_MAT_DEPTH_MASK;
- uchar chans = 1 + (type >> CV_CN_SHIFT);
- switch ( depth ) {
- case CV_8U: r = "8U"; break;
- case CV_8S: r = "8S"; break;
- case CV_16U: r = "16U"; break;
- case CV_16S: r = "16S"; break;
- case CV_32S: r = "32S"; break;
- case CV_32F: r = "32F"; break;
- case CV_64F: r = "64F"; break;
- default: r = "User"; break;
- }
- r += "C";
- r += (chans+'0');
- return r;
- }
- void vertical_projection(Mat input)
- {
- cv::threshold(input, input, 40, 255, CV_THRESH_BINARY);
- int qtdZeros = 0;
- vector<int> vZeros;
- #ifdef SAVEFILE
- FILE* saida = fopen("vetor.txt", "w+");
- #endif
- cout << "COLS: " << input.cols << " - ROWS: " << input.rows << endl;
- int aux = 0, xini = 0, xfim = 0;
- vector<Mat> testim;
- for(int j = 0; j < input.cols;j++)
- {
- for(int i = 0; i < input.rows;i++)
- {
- if(input.at<uchar>(i,j) == 0)
- {
- qtdZeros++;
- }
- }
- vZeros.push_back(qtdZeros);
- qtdZeros = 0;
- }
- string ty ;
- //Mat teste = Mat::zeros(Size(input.cols, input.rows), CV_8UC1);
- vector<Point> vp;
- vector<int> vi;
- for(int i = 0; i < (int) vZeros.size();i++)
- {
- while(vZeros[i] >= 10 && i < (int) vZeros.size())i++;
- if(vZeros[i] < 10)
- {
- vi.push_back(i);
- if(vi.size() > 1)
- vp.push_back(Point(vi[int(vi.size())-2],vi[int(vi.size())-1]));
- while(vZeros[i] < 10 && i < (int) vZeros.size()) i++;
- vi.push_back(i);
- /*
- for(int k = 0; k < input.rows;k++)
- {
- teste.at<uchar>(k,i) = 255;
- }*/
- }
- }
- //vector<Mat> testando;
- for(int i = 0; i < (int) vp.size(); i++)
- {
- /*testando.push_back*/Mat testando = (Mat::zeros(Size(vp[i].y-vp[i].x, input.rows), CV_8UC1));
- cout << vp[i] << endl;
- cout << "rows: " << testando.rows << " -- " << "cols: " << testando.cols << endl;
- ty = type2str( testando.type() );
- printf("testando: %s %dx%d \n", ty.c_str(),testando.cols, testando.rows );
- ty = type2str( input.type() );
- printf("Input: %s %dx%d \n", ty.c_str(), input.cols, input.rows );
- cout << "input rows: " << input.rows << " -- testando rows: " << testando.rows << endl;
- cout << "input cols: " << testando.cols << " -- testando.cols: " << vp[i].y-vp[i].x << endl;
- cout << vp << endl;
- /*
- for(int j = vp[i].x; j < vp[i].y; j++)
- {
- for(int k = 0; k < testando.rows;k++)
- {
- testando.at<uchar>(j,k) = input.at<uchar>(j,k);
- }
- }
- */
- //croppedImage = fullImage(Rect(X,Y,Width,Height));
- Mat croppedImage = input(Rect(vp[i].x, 0 , vp[i].y-vp[i].x, input.rows));
- imshow("teste" , croppedImage);
- waitKey(0);
- // imshow("teste", testando);
- // waitKey(0);
- }
- /*
- cout << "visize: " << (int) vi.size() << endl;
- for(int i = 1; i < (int) vi.size(); i++)
- {
- cout << "vi: " << vi[i] << endl;
- }
- for(int i = 0; i < (int) vp.size();i++)
- {
- cout << "vp: " << vp[i] << endl;
- }
- getchar();
- */
- Mat g, fin_img;
- g = Mat::zeros(Size(input.cols, input.rows), CV_8UC1);
- ty = type2str( g.type() );
- printf("G: %s %dx%d \n", ty.c_str(), g.cols, g.rows );
- ty = type2str( input.type() );
- printf("Input: %s %dx%d \n", ty.c_str(), input.cols, input.rows );
- vector<Mat> channels;
- channels.push_back(g);
- channels.push_back(g);
- //channels.push_back(teste);
- channels.push_back(input);
- /// Merge the three channels
- merge(channels, fin_img);
- namedWindow("R",1);imshow("R", fin_img);
- cv::waitKey(0);
- #ifdef SAVEFILE
- fprintf(saida,"[");
- for(int i = 0; i < (int) vZeros.size();i++)
- {
- if(i != (int)vZeros.size()-1)
- {
- fprintf(saida,"%d,",vZeros[i]);
- }
- else
- {
- fprintf(saida,"%d",vZeros[i]);
- }
- }
- fprintf(saida,"]");
- #endif
- }
- // Convert int to String - in C++11 => std::to_string()
- std::string intToString(int intNumber)
- {
- string stringToConvert;
- std::stringstream ss;
- ss << intNumber;
- ss >> stringToConvert;
- return stringToConvert;
- }
- int main( int argc, char **argv )
- {
- // Loop para ler as imagens
- for(int i = 0; i < IMG_QTD;i++)
- {
- std::string imgString = intToString(i);
- Mat input = cv::imread(imgString + ".jpg", IMREAD_GRAYSCALE);
- vertical_projection(input);
- imshow("Imagem de entrada", input);
- cv::waitKey(0);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement