zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    成为Java高手的25个学习目标
    JAVA程序员面试之《葵花宝典》
    成为Java高手的25个学习目标
    Java性能的十一个用法
    transit, transfer, convey>conveyance, transport>transportation
    托福常考的名词
    常见学科
    太傻Myoffer系统
    美国ARCO 权威托福考试参考词汇
    NTLDR和Bootfont.bin的作用
  • 原文地址:https://www.cnblogs.com/yifi/p/5839768.html
Copyright © 2011-2022 走看看