OpenCV 学习

  1 #include <opencv2opencv.hpp>
  2 #include <iostream>
  3 #include <opencv2highguihighgui.hpp>
  4 #include <Windows.h>
  5 using namespace std;
  6 using namespace cv;
  7 
  8 const int Silder_Max = 64;
  9 int Silder;
 10 Mat Image;
 11 Mat Result;
 12 BOOL bLBtnDown = FALSE;
 13 BOOL bLBtnUp = FALSE;
 14 Point Corner1, Corner2;
 15 Rect box;
 16 VOID ColorReduce(Mat& InputImage, Mat& OutputImage, int div,int Func);
 17 static VOID Mouse_CallBack(int Event, int x, int y, int, VOID*);
 18 VOID On_TrackBar(int Pos,VOID*);
 19 VOID Sub_1();
 20 int main()
 21 {
 22     //    Mat picture = imread("1.jpg");//图片必须添加到工程目录下
 23     //                                          //也就是和test.cpp文件放在一个文件夹下!!!
 24     //    imshow("测试程序", picture);
 25     //    waitKey(20150901);
 26     //}
 27     Image = imread("3.jpg");
 28     namedWindow("原图像");
 29     namedWindow("显示结果");
 30     namedWindow("Cropping app");
 31     Silder = 0;
 32     createTrackbar("ColorReduce", "显示结果", &Silder, Silder_Max, On_TrackBar);
 33     setMouseCallback("原图像", Mouse_CallBack);
 34     imshow("原图像", Image);
 35     imshow("显示结果", Image);
 36     waitKey(0);
 37 }
 38 
 39 #pragma region 鼠标事件回调
 40 
 41 static VOID Mouse_CallBack(int Event, int x, int y, int, VOID*)
 42 {
 43     if (Event == EVENT_LBUTTONDOWN)
 44     {
 45         bLBtnDown = TRUE;
 46         Corner1.x = x;
 47         Corner1.y = y;
 48         cout << Corner1 << endl;
 49     }
 50     if (Event == EVENT_LBUTTONUP)
 51     {
 52         if (abs(x - Corner1.x) > 20 && abs(y - Corner1.y) > 20)
 53         {
 54             bLBtnUp = TRUE;
 55             Corner2.x = x;
 56             Corner2.y = y;
 57             cout << Corner2 << endl;
 58         }
 59         else
 60         {
 61             bLBtnDown = FALSE;
 62         }
 63     }
 64     if (bLBtnDown == TRUE && bLBtnUp == FALSE)
 65     {
 66         Point pt;
 67         pt.x = x;
 68         pt.y = y;
 69         Mat Local_Image = Image.clone();
 70         rectangle(Local_Image, Corner1, pt, Scalar(0, 0, 255));
 71 
 72         imshow("Cropping app", Local_Image);
 73     }
 74     if (bLBtnDown == TRUE && bLBtnUp == TRUE)
 75     {
 76         box.width = abs(Corner1.x - Corner2.x);
 77         box.height = abs(Corner1.y - Corner2.y);
 78         box.x = min(Corner1.x, Corner2.x);
 79         box.y = min(Corner1.y, Corner2.y);
 80         Mat crop(Image, box);
 81         Mat Temp;
 82         ColorReduce(crop, Temp, 0, 1);
 83         namedWindow("Crop");
 84         imshow("Crop", Temp);
 85         bLBtnDown = FALSE;
 86         bLBtnUp = FALSE;
 87 
 88     }
 89 }
 90 
 91 
 92 #pragma endregion
 93 #pragma region 滑竿空间操作
 94 VOID On_TrackBar(int Pos, VOID*)
 95 {
 96     if (Pos <= 0)
 97     {
 98         Result = Image;
 99     }
100     else
101     {
102         ColorReduce(Image, Result, Pos, 0);
103     }
104     imshow("显示结果", Result);
105 }
106 #pragma endregion
107 
108 #pragma region 色素操作
109 
110 VOID ColorReduce(Mat& InputImage, Mat& OutputImage, int div, int Func)
111 {
112 
113     if (Func == 0)
114     {
115         OutputImage = InputImage.clone();
116         int Rows = OutputImage.rows;
117         int Cols = OutputImage.cols * OutputImage.channels();
118         if (OutputImage.isContinuous())
119         {
120             Cols *= Rows;
121             Rows = 1;
122         }
123         for (int i = 0;i < Rows;i++)
124         {
125             UCHAR* Data = InputImage.ptr<UCHAR>(i);
126             UCHAR* DataOut = OutputImage.ptr<UCHAR>(i);
127             for (int j = 0;j < Cols;j++)
128             {
129                 Data[j] = DataOut[j] / div*div + div / 2;
130             }
131         }
132     }
133     else
134     {
135         OutputImage = InputImage.clone();
136         int Rows = OutputImage.rows;
137         int Cols = OutputImage.cols;
138         for (int i = 0;i < Rows;i++)
139         {
140             for (int j = 0;j < Cols;j++)
141             {
142                 OutputImage.at<Vec3b>(i, j)[0] = 255 - OutputImage.at<Vec3b>(i, j)[0];
143                 OutputImage.at<Vec3b>(i, j)[1] = 255 - OutputImage.at<Vec3b>(i, j)[1];
144                 OutputImage.at<Vec3b>(i, j)[2] = 255 - OutputImage.at<Vec3b>(i, j)[2];
145 
146             }
147         }
148     }
149 
150 }
151 #pragma endregion
152 
153 VOID Sub_1()
154 {
155 
156 
157     Mat Image, Result;
158     cout << "Size: " << Image.size().height << "," << Image.size().width << endl;
159     Image = imread("1.jpg");
160     if (!Image.data)
161     {
162 
163         cout << "Read Data Failed" << endl;
164     }
165     namedWindow("Ortginal Image");
166     imshow("Ortginal Image", Image);
167     flip(Image, Result, 1);
168     namedWindow("Output Image");
169     imshow("Output Image", Result);
170     waitKey(0);
171 }
View Code
爱程序 不爱bug 爱生活 不爱黑眼圈 我和你们一样 我和你们不一样 我不是凡客 我要做geek
原文地址:https://www.cnblogs.com/yifi/p/5839768.html