OpenCV 学习

  1 #include <opencv2\opencv.hpp>
  2 #include <iostream>
  3 #include <opencv2\highgui\highgui.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 }

时间: 2024-11-08 13:01:24

OpenCV 学习的相关文章

OpenCV 学习(利用滤波器进行边缘提取)

OpenCV 学习(利用滤波器进行边缘提取) 通过低通滤波器,我们可以将图像平滑,相反的,利用高通滤波器可以提取出图像的边缘. Sobel 滤波器 Sobel 滤波器是一种有方向性的滤波器,可以作用在 X 方向或 Y 方向. 关于这种滤波器的理论介绍可以参考: https://en.wikipedia.org/wiki/Sobel_operator 函数原型如下: void Sobel( InputArray src, OutputArray dst, int ddepth, int dx, i

OpenCV学习之六: 使用方向梯度直方图估计图像旋转角度

在备份ltedecoder程序时,需要把此目录拷由到bak目录下,但decoder目录下有个大文件,不需要备份,还有日志问题,也不需要备份,如何实现呢?? 方法: cd /source-dir find . -name .snapshot -prune -o -print0 | cpio -pmd0 /dest-dir 解释: This command copies the contents of /source-dir to /dest-dir, but omits files and dir

Opencv学习笔记(六)SURF学习笔记

原创文章,转载请注明出处:http://blog.csdn.net/crzy_sparrow/article/details/7392345 本人挺菜的,肯定有非常多错误纰漏之处 ,希望大家不吝指正. 看了harris角点检測之后,開始研究SURF角点检測,发现挺复杂的,一时也仅仅了解了大概,把了解的东西总结下,以便下次深入学习. SURF角点检測算法是对SIFT的一种改进,主要体如今速度上,效率更高.它和SIFT的主要差别是图像多尺度空间的构建方法不同. 在计算视觉领域,尺度空间被象征性的表述

opencv学习笔记(四)投影

opencv学习笔记(四)投影 任选了一张图片用于测试,图片如下所示: 1 #include <cv.h> 2 #include <highgui.h> 3 using namespace std; 4 using namespace cv; 5 int main() 6 { 7 IplImage * src = cvLoadImage("cat.png", 0); //强制转化读取图像为灰度图 8 cvShowImage("灰度图像", s

OpenCV学习笔记(一)安装及运行第一个OpenCV程序

1.下载及安装 OpenCV是一套开源免费的图形库,主要有C/C++语言编写,官网: http://opencv.org/ .在 http://opencv.org/downloads.html 可以找到个版本和各种平台的程序包.OpenCV的Windows平台安装包是放在SourceForge.net网站. 我下了2.4.4版,大概217M.安装包其实就是一个压缩包,安装过程就是解压到某个文件夹.我是安装到 E:\Soft\opencv 目录,安装后文件夹如下: 我们只需要关注“build”文

OpenCV学习之八:RNG类 随机数生成函数的使用

OpenCV学习之八:随机数生成函数 运行结果: OpenCV学习之八:RNG类 随机数生成函数的使用,布布扣,bubuko.com

OpenCV学习笔记(01)我的第一个OpenCV程序(环境配置)

昨天刚刚考完编译原理,私心想着可以做一些与考试无关的东西了.一直想做和图像处理相关的东西,趁这段时间有空学习一下OpenCV,搭建环境真是一件麻烦的事情,搞了近三个小时终于OK了.先来张图: 大致描述一下步骤吧: 一.安装前准备 1.VS2012(网上看到很多用的VS2010,但是基本不影响) 2.OpenCV 安装包(我下载的是最新的2.4.9) 二.安装OpenCV 1.解压OPenCV 说是安装,其实就是解压,OpenCV的Windows安装程序就是一个自解压程序: 这里我解压到C:\Pr

opencv学习笔记(03)——遍历图像(迭代器法)

1 #include <opencv2\highgui\highgui.hpp> 2 #include <opencv2\imgproc\imgproc.hpp> 3 #include <opencv2\core\core.hpp> 4 5 void colorReduce(cv::Mat& img, int div=64); 6 7 8 int main() 9 { 10 cv::Mat img_orginal = cv::imread("F:\\i

OpenCV学习资源整理……

http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/tutorials.html OpenCV(2.3.2)官方教程中文版 http://docs.opencv.org/doc/tutorials/tutorials.html OpenCV(2.4.9)官方教程英文版 http://docs.opencv.org/modules/refman.html OpenCV(2.4.9)API参考 http://www.cnblogs.

OpenCV学习笔记[3]Java Demo人脸识别

OpenCV学习笔记:Java Demo人脸识别 [简介] 我记得在很久以前,CSDN似乎搞过一个活动,给一个橘子林的照片,让程序计算相片里有多少个橘子.之所以对这个问题记忆犹新,是因为在专业学习初期,相比于排序遍历搜索等简单算法而言,"图像识别"算法一直是难以理解的东西,而我偏偏又痴迷于此,不管自己多么无知,对于令我迷惑的问题总是充满着解决的渴望. 通过对OpenCV的初步了解,我发现图像识别的很多问题都可以用它方便的解决,本次将是一个来自官方的人脸识别的实例,我们提供图像,使用内置