Advertisement
Rapela

Untitled

Dec 6th, 2016
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.40 KB | None | 0 0
  1. // Libs de opencv necessarias
  2. #include <opencv2/imgproc/imgproc.hpp>
  3. #include <opencv2/highgui/highgui.hpp>
  4.  
  5. // Lib com tudo que eh necessario
  6. #include <bits/stdc++.h>
  7.  
  8. // Usando namespace std e cv
  9. using namespace std;
  10. using namespace cv;
  11.  
  12. // Quantidade de imagens para ler
  13. #define IMG_QTD 1
  14. #define SHOWSTEPS true
  15. #define SAVEREGIONS true
  16.  
  17. //#define SAVEFILE 1
  18.  
  19.  
  20. string type2str(int type) {
  21. string r;
  22.  
  23. uchar depth = type & CV_MAT_DEPTH_MASK;
  24. uchar chans = 1 + (type >> CV_CN_SHIFT);
  25.  
  26. switch ( depth ) {
  27. case CV_8U: r = "8U"; break;
  28. case CV_8S: r = "8S"; break;
  29. case CV_16U: r = "16U"; break;
  30. case CV_16S: r = "16S"; break;
  31. case CV_32S: r = "32S"; break;
  32. case CV_32F: r = "32F"; break;
  33. case CV_64F: r = "64F"; break;
  34. default: r = "User"; break;
  35. }
  36.  
  37. r += "C";
  38. r += (chans+'0');
  39.  
  40. return r;
  41. }
  42.  
  43.  
  44. void vertical_projection(Mat input)
  45. {
  46. cv::threshold(input, input, 40, 255, CV_THRESH_BINARY);
  47.  
  48. int qtdZeros = 0;
  49. vector<int> vZeros;
  50.  
  51. #ifdef SAVEFILE
  52. FILE* saida = fopen("vetor.txt", "w+");
  53. #endif
  54. cout << "COLS: " << input.cols << " - ROWS: " << input.rows << endl;
  55.  
  56. int aux = 0, xini = 0, xfim = 0;
  57.  
  58.  
  59. vector<Mat> testim;
  60.  
  61. for(int j = 0; j < input.cols;j++)
  62. {
  63.  
  64. for(int i = 0; i < input.rows;i++)
  65. {
  66. if(input.at<uchar>(i,j) == 0)
  67. {
  68. qtdZeros++;
  69. }
  70.  
  71. }
  72.  
  73. vZeros.push_back(qtdZeros);
  74. qtdZeros = 0;
  75.  
  76. }
  77.  
  78. string ty ;
  79.  
  80. //Mat teste = Mat::zeros(Size(input.cols, input.rows), CV_8UC1);
  81. vector<Point> vp;
  82. vector<int> vi;
  83.  
  84.  
  85. for(int i = 0; i < (int) vZeros.size();i++)
  86. {
  87. while(vZeros[i] >= 10 && i < (int) vZeros.size())i++;
  88.  
  89. if(vZeros[i] < 10)
  90. {
  91. vi.push_back(i);
  92. if(vi.size() > 1)
  93. vp.push_back(Point(vi[int(vi.size())-2],vi[int(vi.size())-1]));
  94.  
  95. while(vZeros[i] < 10 && i < (int) vZeros.size()) i++;
  96.  
  97. vi.push_back(i);
  98.  
  99. /*
  100. for(int k = 0; k < input.rows;k++)
  101. {
  102. teste.at<uchar>(k,i) = 255;
  103. }*/
  104.  
  105. }
  106.  
  107. }
  108.  
  109. //vector<Mat> testando;
  110. for(int i = 0; i < (int) vp.size(); i++)
  111. {
  112. /*testando.push_back*/Mat testando = (Mat::zeros(Size(vp[i].y-vp[i].x, input.rows), CV_8UC1));
  113. cout << vp[i] << endl;
  114. cout << "rows: " << testando.rows << " -- " << "cols: " << testando.cols << endl;
  115.  
  116. ty = type2str( testando.type() );
  117. printf("testando: %s %dx%d \n", ty.c_str(),testando.cols, testando.rows );
  118.  
  119. ty = type2str( input.type() );
  120. printf("Input: %s %dx%d \n", ty.c_str(), input.cols, input.rows );
  121.  
  122. cout << "input rows: " << input.rows << " -- testando rows: " << testando.rows << endl;
  123. cout << "input cols: " << testando.cols << " -- testando.cols: " << vp[i].y-vp[i].x << endl;
  124.  
  125. cout << vp << endl;
  126.  
  127. /*
  128. for(int j = vp[i].x; j < vp[i].y; j++)
  129. {
  130.  
  131. for(int k = 0; k < testando.rows;k++)
  132. {
  133. testando.at<uchar>(j,k) = input.at<uchar>(j,k);
  134. }
  135. }
  136. */
  137.  
  138. //croppedImage = fullImage(Rect(X,Y,Width,Height));
  139. Mat croppedImage = input(Rect(vp[i].x, 0 , vp[i].y-vp[i].x, input.rows));
  140. imshow("teste" , croppedImage);
  141. waitKey(0);
  142.  
  143. // imshow("teste", testando);
  144. // waitKey(0);
  145. }
  146.  
  147. /*
  148. cout << "visize: " << (int) vi.size() << endl;
  149. for(int i = 1; i < (int) vi.size(); i++)
  150. {
  151. cout << "vi: " << vi[i] << endl;
  152. }
  153. for(int i = 0; i < (int) vp.size();i++)
  154. {
  155. cout << "vp: " << vp[i] << endl;
  156. }
  157. getchar();
  158. */
  159.  
  160. Mat g, fin_img;
  161. g = Mat::zeros(Size(input.cols, input.rows), CV_8UC1);
  162.  
  163. ty = type2str( g.type() );
  164. printf("G: %s %dx%d \n", ty.c_str(), g.cols, g.rows );
  165.  
  166. ty = type2str( input.type() );
  167. printf("Input: %s %dx%d \n", ty.c_str(), input.cols, input.rows );
  168.  
  169.  
  170. vector<Mat> channels;
  171. channels.push_back(g);
  172. channels.push_back(g);
  173. //channels.push_back(teste);
  174. channels.push_back(input);
  175.  
  176. /// Merge the three channels
  177. merge(channels, fin_img);
  178. namedWindow("R",1);imshow("R", fin_img);
  179.  
  180. cv::waitKey(0);
  181.  
  182.  
  183. #ifdef SAVEFILE
  184. fprintf(saida,"[");
  185. for(int i = 0; i < (int) vZeros.size();i++)
  186. {
  187. if(i != (int)vZeros.size()-1)
  188. {
  189. fprintf(saida,"%d,",vZeros[i]);
  190. }
  191. else
  192. {
  193. fprintf(saida,"%d",vZeros[i]);
  194. }
  195.  
  196. }
  197. fprintf(saida,"]");
  198. #endif
  199.  
  200.  
  201. }
  202.  
  203. // Convert int to String - in C++11 => std::to_string()
  204. std::string intToString(int intNumber)
  205. {
  206. string stringToConvert;
  207. std::stringstream ss;
  208. ss << intNumber;
  209. ss >> stringToConvert;
  210. return stringToConvert;
  211. }
  212.  
  213.  
  214.  
  215.  
  216.  
  217. int main( int argc, char **argv )
  218. {
  219.  
  220. // Loop para ler as imagens
  221. for(int i = 0; i < IMG_QTD;i++)
  222. {
  223.  
  224. std::string imgString = intToString(i);
  225.  
  226. Mat input = cv::imread(imgString + ".jpg", IMREAD_GRAYSCALE);
  227.  
  228. vertical_projection(input);
  229.  
  230. imshow("Imagem de entrada", input);
  231. cv::waitKey(0);
  232.  
  233. }
  234.  
  235.  
  236. return 0;
  237. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement