Advertisement
Guest User

Untitled

a guest
Feb 7th, 2016
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.15 KB | None | 0 0
  1. #include <opencv2/imgproc/imgproc.hpp>
  2. #include <opencv2/highgui/highgui.hpp>
  3.  
  4. #include <iostream>
  5. #include <vector>
  6.  
  7. using namespace std;
  8. using namespace cv;
  9.  
  10.  
  11. void question1(Mat image) {
  12. if (image.channels() >= 3) {
  13. vector <Mat> rgb(image.channels());
  14. namedWindow("original");
  15. imshow("original", image);
  16. split(image, rgb);
  17. namedWindow("b");
  18. imshow("b", rgb[0]);
  19. namedWindow("g");
  20. imshow("g", rgb[1]);
  21. namedWindow("r");
  22. imshow("r", rgb[2]);
  23. waitKey(0);
  24.  
  25. }
  26. }
  27.  
  28. void question2(Mat image) {
  29. if (image.channels() >= 3) {
  30. Mat fin;
  31. vector <Mat> hsv(image.channels());
  32. cvtColor(image, fin, CV_BGR2HSV);
  33. split(fin, hsv);
  34. imshow("Hue Channel", hsv[0]);
  35. imshow("Saturation Channel", hsv[1]);
  36. imshow("Value Channel", hsv[2]);
  37. waitKey(0);
  38. }
  39. }
  40.  
  41. void question3(Mat image) {
  42. if (image.channels() >= 3) {
  43. Mat fin;
  44. vector <Mat> lab(image.channels());
  45. cvtColor(image, fin, CV_BGR2Lab);
  46. split(fin, lab);
  47. imshow("L", lab[0]);
  48. imshow("a", lab[1]);
  49. imshow("b", lab[2]);
  50. waitKey(0);
  51. }
  52. }
  53.  
  54. void question4(Mat image) {
  55. if (image.channels() >= 3) {
  56. Mat fin;
  57. cvtColor(image, fin, CV_BGR2GRAY);
  58. namedWindow("GreyScale");
  59. imshow("GreyScale", fin);
  60. waitKey(0);
  61. }
  62. }
  63.  
  64. void question7a(Mat image) {
  65. if (image.empty()) {
  66. cout << "Could not load image";
  67. system("pause");
  68. }
  69. else {
  70. Mat fin;
  71. cvtColor(image, fin, CV_BGR2GRAY);
  72. Mat hist;
  73. equalizeHist(fin, hist);
  74. namedWindow("original");
  75. imshow("original", image);
  76. namedWindow("grey");
  77. imshow("grey", fin);
  78. namedWindow("hist");
  79. imshow("hist", hist);
  80. waitKey(0);
  81. }
  82.  
  83. }
  84.  
  85. void question5() {
  86. Mat image;
  87. image = imread("C:/Users/siddartha/Pictures/selfie.jpg");
  88. if (image.empty()) {
  89. cout << "Image could not be loaded";
  90. system("pause");
  91. return;
  92. }
  93.  
  94. Mat skin;
  95. blur(image, skin, Size(1, 1));
  96. cvtColor(skin, skin, CV_BGR2HSV);
  97. Mat bw;
  98. inRange(skin, Scalar(0, 10, 60), Scalar(50, 250, 255), bw);
  99. vector <Mat> hsv(skin.channels());
  100. vector <Mat> bin(bw.channels());
  101. split(bw, bin);
  102. split(skin, hsv);
  103.  
  104. hsv[2] += bin[0] / 5;
  105.  
  106. vector <Mat> channelsFinal;
  107. channelsFinal.push_back(hsv[0]);
  108. channelsFinal.push_back(hsv[1]);
  109. channelsFinal.push_back(hsv[2]);
  110.  
  111.  
  112. Mat finalImage;
  113. merge(channelsFinal, finalImage);
  114. hsv[2] -= 2 * (bin[0] / 5);
  115.  
  116.  
  117. vector<Mat> channelsDark;
  118. channelsDark.push_back(hsv[0]);
  119. channelsDark.push_back(hsv[1]);
  120. channelsDark.push_back(hsv[2]);
  121. Mat finalDark;
  122. merge(channelsDark, finalDark);
  123.  
  124. cvtColor(finalDark, finalDark, CV_HSV2BGR);
  125. cvtColor(finalImage, finalImage, CV_HSV2BGR);
  126. imshow("fairer", finalImage);
  127. imshow("darker", finalDark);
  128.  
  129. namedWindow("original");
  130. imshow("original", image);
  131. imshow("skin", bw);
  132. waitKey(0);
  133. }
  134.  
  135.  
  136. void question7b(Mat image) {
  137. Mat grey;
  138. cvtColor(image, grey, CV_BGR2GRAY);
  139. //imshow("GREY",grey);
  140.  
  141. Mat tmp(grey.rows, grey.cols, CV_16SC1);
  142. Scalar mean, dev;
  143. meanStdDev(grey, mean, dev);
  144.  
  145. for (int i = 0;i < grey.rows; i++) {
  146. for (int j = 0; j < grey.cols; j++) {
  147. //tmp.at<uchar>(i, j) = (grey.at<uchar>(i, j) - mean[0]) / dev[0];
  148. }
  149. }
  150.  
  151.  
  152. cout << mean << dev;
  153. //cout << grey;
  154. //imshow("lightGrey", grey);
  155. waitKey(0);
  156. system("pause");
  157.  
  158. }
  159.  
  160.  
  161. void question8(Mat image) {
  162.  
  163. //cvtColor(image, image, CV_BGR2GRAY);
  164.  
  165. int DELAY_CAPTION = 1500;
  166. int DELAY_BLUR = 100;
  167. int MAX_KERNEL_LENGTH = 15;
  168. Mat gausBlur;
  169. gausBlur = image.clone();
  170. for (int i = 1; i < MAX_KERNEL_LENGTH; i += 2) {
  171. GaussianBlur(image, gausBlur, Size(i, i), 0, 0);
  172. }
  173.  
  174. imshow("original", image);
  175. imshow("Gausian", gausBlur);
  176. waitKey(0);
  177.  
  178. }
  179.  
  180. void question9a(Mat image) {
  181.  
  182. cvtColor(image, image, CV_BGR2GRAY);
  183.  
  184. int MAX_KERNEL_LENGTH = 6;
  185. Mat noise;
  186. noise = image.clone();
  187. randn(noise, 20 , 10);
  188. noise = noise + image;
  189. Mat blur;
  190. blur = noise.clone();
  191. for (int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2) {
  192. medianBlur(noise, blur, i);
  193. cout << "hello\n";
  194. }
  195.  
  196. imshow("image", image);
  197. imshow("Gausian", noise);
  198. imshow("Median", blur);
  199. waitKey(0);
  200. }
  201.  
  202. void question9b(Mat image) {
  203. cvtColor(image, image, CV_BGR2GRAY);
  204. Mat saltPepper = image.clone();
  205. randu(saltPepper, 0, 255);
  206.  
  207. Mat black = saltPepper < 30;
  208. Mat white = saltPepper > 255;
  209.  
  210. Mat saltPepperImg = image.clone();
  211. saltPepperImg.setTo(255, white);
  212. saltPepperImg.setTo(0, black);
  213.  
  214. imshow("salt", saltPepperImg);
  215.  
  216.  
  217. int MAX_KERNEL_LENGTH = 10;
  218. Mat blur;
  219. blur = saltPepperImg.clone();
  220. for (int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2) {
  221. medianBlur(saltPepperImg, blur, i);
  222. cout << "hello\n";
  223. }
  224.  
  225. imshow("blurred", blur);
  226. waitKey(0);
  227. }
  228.  
  229. void question14() {
  230. Mat image_bgr, image_gray, image_morph;
  231. Mat grad_x, abs_grad_x, image_gauss, image_close, image_otsu;
  232. vector<vector<Point> > contours;
  233. vector<Vec4i> hierarchy;
  234. int scale = 1;
  235. int delta = 0;
  236. int ddepth = CV_16S;
  237. image_bgr = imread("C:/Users/siddartha/Pictures/car11.jpg");
  238.  
  239. if (!image_bgr.data)
  240. {
  241. printf("No image data \n");
  242. system("pause");
  243. return;
  244. }
  245. namedWindow("Display Image", WINDOW_NORMAL);
  246. imshow("Display Image", image_bgr);
  247. waitKey(0);
  248. cvtColor(image_bgr, image_gray, CV_BGR2GRAY);
  249. namedWindow("Display Image2", WINDOW_NORMAL);
  250. imshow("Display Image2", image_gray);
  251. waitKey(0);
  252. Sobel(image_gray, grad_x, ddepth, 1, 0, 3, scale, delta, BORDER_DEFAULT);
  253. convertScaleAbs(grad_x, abs_grad_x);
  254. namedWindow("Display Image3", WINDOW_NORMAL);
  255. imshow("Display Image3", abs_grad_x);
  256. waitKey(0);
  257. GaussianBlur(abs_grad_x, image_gauss, Size(5, 5), 0, 0);
  258. namedWindow("Display Image4", WINDOW_NORMAL);
  259. imshow("Display Image4", image_gauss);
  260. waitKey(0);
  261. Mat element = getStructuringElement(MORPH_RECT, Size(23, 2), Point(-1, -1));
  262. morphologyEx(image_gauss, image_close, MORPH_CLOSE, element);
  263. namedWindow("Display Image5", WINDOW_NORMAL);
  264. imshow("Display Image5", image_close);
  265. waitKey(0);
  266. threshold(image_close, image_otsu, 0, 255, CV_THRESH_BINARY | CV_THRESH_OTSU);
  267. namedWindow("Display Image6", WINDOW_NORMAL);
  268. imshow("Display Image6", image_otsu);
  269. waitKey(0);
  270. findContours(image_otsu, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE, Point(0, 0));
  271. vector<vector<Point> >::iterator itc = contours.begin();
  272. Point2f vertices[4];
  273. Scalar color = Scalar(0, 0, 255);
  274. while (itc != contours.end())
  275. {
  276. RotatedRect mr = minAreaRect(Mat(*itc));
  277. float width = mr.size.width;
  278. float height = mr.size.height;
  279. bool output = false;
  280. if ((width != 0) & (height != 0))
  281. {
  282. if (((height / width>2) & (height>width)) | ((width / height>2) & (width>height)))
  283. {
  284. if ((height*width<10000) & (height*width>2000))
  285. {
  286. output = true;
  287. Point2f rect_points[4];
  288. mr.points(rect_points);
  289. for (int j = 0; j < 4; j++)
  290. line(image_bgr, rect_points[j], rect_points[(j + 1) % 4], color, 2, 8);
  291. }
  292. }
  293. }
  294. ++itc;
  295. }
  296. namedWindow("Display Image7", WINDOW_NORMAL);
  297. imshow("Display Image7", image_bgr);
  298. waitKey(0);
  299. return;
  300. }
  301. void test() {
  302. Mat image = imread("C:/Users/siddartha/Pictures/car1.jpg");
  303. cvtColor(image, image, CV_BGR2GRAY);
  304. imshow("car", image);
  305.  
  306. int morph_size = 2;
  307. Mat element = getStructuringElement(MORPH_RECT, Size(2 * morph_size + 1, 2 * morph_size + 1), Point(morph_size, morph_size));
  308. /*
  309. Mat dst;
  310. for (int i = 1;i < 10;i++)
  311. {
  312.  
  313. morphologyEx(image, dst, MORPH_TOPHAT, element, Point(-1, -1), i, BORDER_CONSTANT);
  314. //morphologyEx( src, dst, MORPH_TOPHAT, element ); // here iteration=1
  315. imshow("source", image);
  316. imshow("result", dst);
  317. waitKey(1000);
  318. }
  319. */
  320.  
  321. Mat dil;
  322. dilate(image, dil, Mat(), Point(-1, -1), 2, 1, 1);
  323. imshow("dilation", dil);
  324.  
  325. Mat ero;
  326. erode(dil, ero, Mat(), Point(-1, -1), 2, 1, 1);
  327. imshow("erode", ero);
  328.  
  329. Mat sub;
  330. sub = image - ero;
  331. imshow("Subtraction", sub);
  332.  
  333. waitKey(0);
  334. }
  335.  
  336.  
  337. void question10(Mat image) {
  338. Mat src, src_gray;
  339. Mat grad;
  340. char* window_name = "Sobel Demo - Simple Edge Detector";
  341. int scale = 1;
  342. int delta = 0;
  343. int ddepth = CV_16S;
  344.  
  345. int c;
  346.  
  347. /// Load an image
  348. src = image;
  349.  
  350. if (!src.data)
  351. {
  352. return;
  353. }
  354.  
  355. GaussianBlur(src, src, Size(3, 3), 0, 0, BORDER_DEFAULT);
  356.  
  357. /// Convert it to gray
  358. cvtColor(src, src_gray, CV_BGR2GRAY);
  359.  
  360. /// Create window
  361. namedWindow(window_name, CV_WINDOW_AUTOSIZE);
  362.  
  363. /// Generate grad_x and grad_y
  364. Mat grad_x, grad_y;
  365. Mat abs_grad_x, abs_grad_y;
  366.  
  367. /// Gradient X
  368. //Scharr( src_gray, grad_x, ddepth, 1, 0, scale, delta, BORDER_DEFAULT );
  369. Sobel(src_gray, grad_x, ddepth, 1, 0, 3, scale, delta, BORDER_DEFAULT);
  370. convertScaleAbs(grad_x, abs_grad_x);
  371.  
  372. /// Gradient Y
  373. //Scharr( src_gray, grad_y, ddepth, 0, 1, scale, delta, BORDER_DEFAULT );
  374. Sobel(src_gray, grad_y, ddepth, 0, 1, 3, scale, delta, BORDER_DEFAULT);
  375. convertScaleAbs(grad_y, abs_grad_y);
  376.  
  377. /// Total Gradient (approximate)
  378. addWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, 0, grad);
  379.  
  380. imshow(window_name, grad);
  381.  
  382. waitKey(0);
  383.  
  384. }
  385.  
  386. int xGradient(Mat image, int x, int y)
  387. {
  388. return image.at<uchar>(y - 1, x - 1) +
  389. image.at<uchar>(y, x - 1) +
  390. image.at<uchar>(y + 1, x - 1) -
  391. image.at<uchar>(y - 1, x + 1) -
  392. image.at<uchar>(y, x + 1) -
  393. image.at<uchar>(y + 1, x + 1);
  394. }
  395.  
  396. // Computes the y component of the gradient vector
  397. // at a given point in a image
  398. // returns gradient in the y direction
  399.  
  400. int yGradient(Mat image, int x, int y)
  401. {
  402. return image.at<uchar>(y - 1, x - 1) +
  403. image.at<uchar>(y - 1, x) +
  404. image.at<uchar>(y - 1, x + 1) -
  405. image.at<uchar>(y + 1, x - 1) -
  406. image.at<uchar>(y + 1, x) -
  407. image.at<uchar>(y + 1, x + 1);
  408. }
  409.  
  410. void prewitt(Mat image) {
  411. Mat src, dst;
  412. int gx, gy, sum;
  413. cvtColor(image, image, CV_BGR2GRAY);
  414. // Load an image
  415. src = image;
  416. dst = src.clone();
  417. if (!src.data)
  418. {
  419. return ;
  420. }
  421.  
  422.  
  423. for (int y = 0; y < src.rows; y++)
  424. for (int x = 0; x < src.cols; x++)
  425. dst.at<uchar>(y, x) = 0.0;
  426.  
  427. for (int y = 1; y < src.rows - 1; y++) {
  428. for (int x = 1; x < src.cols - 1; x++) {
  429. gx = xGradient(src, x, y);
  430. gy = yGradient(src, x, y);
  431. sum = abs(gx) + abs(gy);
  432. sum = sum > 255 ? 255 : sum;
  433. sum = sum < 0 ? 0 : sum;
  434. dst.at<uchar>(y, x) = sum;
  435. }
  436. }
  437.  
  438. namedWindow("final");
  439. imshow("final", dst);
  440.  
  441. namedWindow("initial");
  442. imshow("initial", src);
  443.  
  444. waitKey(0);
  445.  
  446. }
  447.  
  448. void question12(Mat image) {
  449. Mat src, src_gray, dst;
  450. int kernel_size = 3;
  451. int scale = 1;
  452. int delta = 0;
  453. int ddepth = CV_16S;
  454. char* window_name = "Laplace Demo";
  455.  
  456. int c;
  457.  
  458. /// Load an image
  459. src = image;
  460.  
  461. if (!src.data)
  462. {
  463. return ;
  464. }
  465.  
  466. /// Remove noise by blurring with a Gaussian filter
  467. //GaussianBlur(src, src, Size(3, 3), 0, 0, BORDER_DEFAULT);
  468.  
  469. /// Convert the image to grayscale
  470. cvtColor(src, src_gray, CV_BGR2GRAY);
  471.  
  472. /// Create window
  473. namedWindow(window_name, CV_WINDOW_AUTOSIZE);
  474.  
  475. /// Apply Laplace function
  476. Mat abs_dst;
  477.  
  478. Laplacian(src_gray, dst, ddepth, kernel_size, scale, delta, BORDER_DEFAULT);
  479. convertScaleAbs(dst, abs_dst);
  480. cout << image.channels();
  481. cout << "\t" << abs_dst.channels();
  482. /// Show what you got
  483.  
  484. GaussianBlur(abs_dst, abs_dst, Size(3, 3), 0, 0, BORDER_DEFAULT);
  485. imshow(window_name, abs_dst);
  486. waitKey(0);
  487.  
  488.  
  489. }
  490.  
  491. void main() {
  492. Mat image;
  493. image = imread("C:/Users/siddartha/Pictures/test2.jpg");
  494. if (image.empty()) {
  495. cout << "Cannot load image";
  496. system("pause");
  497. return;
  498.  
  499. }
  500. else {
  501. cout << image.size();
  502. //namedWindow("original");
  503. //imshow("original", image);
  504. //question1(image);
  505. //question2(image);
  506. //question3(image);
  507. //question4(image);
  508. //question5();
  509. //question7a(image);
  510. //question7b(image);
  511. //question8(image);
  512. //question9a(image);
  513. //question9b(image);
  514. //question10(image);
  515. //prewitt(image);
  516. //question12(image);
  517. question14();
  518. //waitKey(0);
  519. }
  520.  
  521. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement