Advertisement
Guest User

Untitled

a guest
Jan 17th, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.18 KB | None | 0 0
  1. #include <opencv2/opencv.hpp>
  2. #include <windows.h>
  3.  
  4. using namespace std;
  5. using namespace cv;
  6.  
  7. //zad.1
  8. Mat image;
  9. Point seed1, seed2;
  10. int klik = 0;
  11.  
  12. //zad.2
  13. Mat src1, src2;
  14. const int alpha_slider_max = 100;
  15. int alpha_slider;
  16.  
  17. //zad.4
  18. vector<Point2f> Cel;
  19.  
  20.  
  21. void negatyw(Mat& _src, Mat& _dst) //progowanie dla zaznaczonego obszaru dla konkretnego kanalu
  22. {
  23. _src.copyTo(_dst);
  24. typedef Vec<uchar, 3> Pixel;
  25.  
  26. for (int i = seed1.y; i < seed2.y; i++)
  27. for (int j = seed1.x; j < seed2.x; j++)
  28. {
  29. _dst.at<Pixel>(i, j).val[0] = 255 - _dst.at<Pixel>(i, j).val[0];
  30. _dst.at<Pixel>(i, j).val[1] = 255 - _dst.at<Pixel>(i, j).val[1];
  31. _dst.at<Pixel>(i, j).val[2] = 255 - _dst.at<Pixel>(i, j).val[2];
  32. }
  33. }
  34.  
  35. static void onMouse(int event, int x, int y, int, void*)
  36. {
  37. if (event == EVENT_LBUTTONDOWN)
  38. {
  39. if (klik == 0)
  40. {
  41. seed1 = Point(x, y);
  42. klik = 1;
  43. }
  44. else if (klik == 1)
  45. {
  46. seed2 = Point(x, y);
  47. klik = 0;
  48. negatyw(image, image); //operacja progowania dla kanłu zielonego
  49. imshow("org", image);
  50. }
  51. }
  52. }
  53.  
  54.  
  55. void NegativeDirectMemoryAccess(Mat& img)
  56. {
  57. int kolumny = img.cols* alpha_slider / 100;;
  58. typedef Vec<uchar, 3> Pixel;
  59. for (int i = 0; i < img.rows; i++)
  60. for (int j = 0; j < kolumny; j++)
  61. {
  62. img.at<Pixel>(i, j).val[0] = 255 - img.at<Pixel>(i, j).val[0];
  63. img.at<Pixel>(i, j).val[1] = 255 - img.at<Pixel>(i, j).val[1];
  64. img.at<Pixel>(i, j).val[2] = 255 - img.at<Pixel>(i, j).val[2];
  65. }
  66.  
  67. }
  68.  
  69. void pomaluj(Mat& _src, Mat& _dst)
  70. {
  71. _src.copyTo(_dst);
  72. typedef Vec<uchar, 3> Pixel;
  73. int liczba =_src.at<Pixel>(160, 110).val[1];
  74. cout << liczba << endl;
  75.  
  76. for (int i = 0; i < _dst.rows; i++)
  77. for (int j = 0; j < _dst.cols; j++)
  78. {
  79. if (_dst.at<Pixel>(i, j).val[0] == 169)
  80. {
  81. _dst.at<Pixel>(i, j).val[0] = 39;
  82. _dst.at<Pixel>(i, j).val[1] = 127;
  83. _dst.at<Pixel>(i, j).val[2] = 255;
  84. }
  85. }
  86.  
  87. }
  88.  
  89. void on_trackbar(int, void*)
  90. {
  91. src2 = src1.clone();
  92. NegativeDirectMemoryAccess(src2);
  93. namedWindow("mod");
  94. imshow("mod", src2);
  95. }
  96.  
  97. static void onMouse2(int event, int x, int y, int, void*)
  98. {
  99. if (event == EVENT_RBUTTONDOWN)
  100. {
  101. cout << "[" << x << "," << y << "]" << endl;
  102. }
  103. if (event == EVENT_LBUTTONDOWN)
  104. {
  105. Point temp1;
  106. temp1 = Point(x, y);
  107. Cel.push_back(temp1);
  108. klik++;
  109.  
  110. }
  111. }
  112. void telewizor()
  113. {
  114.  
  115. vector <Point2f> narozniki4;
  116. Mat lambda(2, 4, CV_32FC1);
  117. Mat output;
  118. Mat tlo, tv;
  119. Point2f temporary;
  120. tlo = imread("tv.png", CV_LOAD_IMAGE_COLOR);
  121. imshow("tlo", tlo);
  122. setMouseCallback("tlo", onMouse2, 0);
  123.  
  124.  
  125. temporary.x = 0;
  126. temporary.y = 0;
  127. narozniki4.push_back(temporary);
  128. temporary.x = 640;
  129. temporary.y = 0;
  130. narozniki4.push_back(temporary);
  131. temporary.x = 640;
  132. temporary.y = 480;
  133. narozniki4.push_back(temporary);
  134. temporary.x = 0;
  135. temporary.y = 480;
  136. narozniki4.push_back(temporary);
  137. cout << "Narozniki :\n" << narozniki4 << endl;
  138.  
  139. VideoCapture cap(0); // open the default camera
  140.  
  141. while (1)
  142. {
  143. cap >> tv; // get a new frame from camera
  144. imshow("camera", tv);
  145.  
  146.  
  147. int numberOfChannels = tv.channels();
  148. int numberOfPixels = tv.rows * tv.cols * numberOfChannels;
  149. uchar* p = tv.data;
  150. for (int i = 0; i < numberOfPixels; i = i + numberOfChannels)
  151. for (int j = 0; j < numberOfChannels; ++j)
  152. if (p[i + j] == 0) p[i + j] = 1;
  153.  
  154. if (klik >= 4)
  155. {
  156. lambda = Mat::zeros(tv.rows, tv.cols, tv.type()); //rozmiar taki jaki obraz wycinamy
  157. lambda = getPerspectiveTransform(narozniki4, Cel); //(rozmiar jaki chcemy wyciac, rozmiar jaki chcemy uzyskac)
  158. warpPerspective(tv, output, lambda, Size(tlo.cols, tlo.rows)); //rozmiar obrazu wyjscowego
  159.  
  160. int numberOfChannels = output.channels();
  161. int numberOfPixels = output.rows * output.cols * numberOfChannels;
  162. uchar* p = output.data;
  163. uchar* wyjscie = tlo.data;
  164. for (int i = 0; i < numberOfPixels; i = i + numberOfChannels)
  165. {
  166. for (int j = 0; j < numberOfChannels; ++j)
  167. {
  168. if (p[i + j] != 0) wyjscie[i + j] = p[i + j];
  169. }
  170. }
  171. imshow("wynik", tlo);
  172. }
  173.  
  174.  
  175. if (waitKey(1) >= 0) waitKey(0);
  176. }
  177. }
  178.  
  179. int main(int argc, char** argv)
  180. {
  181. //zad.1
  182. /*image = imread("zad_1.jpg");
  183. if (!image.data) { printf("Error loading src1 \n"); return -1; }
  184. imshow("org", image);
  185. setMouseCallback("org", onMouse, 0);*/
  186.  
  187. //zad2
  188. /*src1 = imread("zad_1.jpg", CV_LOAD_IMAGE_COLOR);
  189. if (!src1.data) { printf("Error loading src1 \n"); return -1; }
  190. char TrackbarName[50];
  191. imshow("org", src1);
  192. sprintf_s(TrackbarName, "Alpha x %d", alpha_slider_max);
  193. createTrackbar(TrackbarName, "org", &alpha_slider, alpha_slider_max, on_trackbar);
  194. on_trackbar(alpha_slider, 0);*/
  195.  
  196. //zad.3
  197. /*Mat src3, src4, obraz_filter, obraz_diff;
  198. Mat M = (Mat_ <int>(3, 3) << 0, -1, 0, -1, 4, -1, 0, -1, 0);
  199. src3 = imread("zad_3.png",IMREAD_GRAYSCALE);
  200. imshow("org", src3);
  201. cout << M << endl;
  202. filter2D(src3, obraz_filter, -1, M);
  203. obraz_diff = abs(obraz_filter);
  204. obraz_diff.convertTo(src4, CV_8U);
  205. imshow("mod", src4);*/
  206.  
  207. //zad.4
  208. telewizor();
  209.  
  210. //zad.7
  211. /*Mat src5, src6;
  212. src5 = imread("lew.png", CV_LOAD_IMAGE_COLOR);
  213. imshow("org", src5);
  214. pomaluj(src5, src6); //operacja progowania dla kanłu zielonego
  215. imshow("org", src6);*/
  216.  
  217.  
  218. waitKey(0);
  219.  
  220. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement