OpenCV 学习
#include <opencv2\opencv.hpp>
#include <iostream>
#include <opencv2\highgui\highgui.hpp>
#include <Windows.h>
using namespace std;
using namespace cv; const int Silder_Max = ;
int Silder;
Mat Image;
Mat Result;
BOOL bLBtnDown = FALSE;
BOOL bLBtnUp = FALSE;
Point Corner1, Corner2;
Rect box;
VOID ColorReduce(Mat& InputImage, Mat& OutputImage, int div,int Func);
static VOID Mouse_CallBack(int Event, int x, int y, int, VOID*);
VOID On_TrackBar(int Pos,VOID*);
VOID Sub_1();
int main()
{
// Mat picture = imread("1.jpg");//图片必须添加到工程目录下
// //也就是和test.cpp文件放在一个文件夹下!!!
// imshow("测试程序", picture);
// waitKey(20150901);
//}
Image = imread("3.jpg");
namedWindow("原图像");
namedWindow("显示结果");
namedWindow("Cropping app");
Silder = ;
createTrackbar("ColorReduce", "显示结果", &Silder, Silder_Max, On_TrackBar);
setMouseCallback("原图像", Mouse_CallBack);
imshow("原图像", Image);
imshow("显示结果", Image);
waitKey();
} #pragma region 鼠标事件回调 static VOID Mouse_CallBack(int Event, int x, int y, int, VOID*)
{
if (Event == EVENT_LBUTTONDOWN)
{
bLBtnDown = TRUE;
Corner1.x = x;
Corner1.y = y;
cout << Corner1 << endl;
}
if (Event == EVENT_LBUTTONUP)
{
if (abs(x - Corner1.x) > && abs(y - Corner1.y) > )
{
bLBtnUp = TRUE;
Corner2.x = x;
Corner2.y = y;
cout << Corner2 << endl;
}
else
{
bLBtnDown = FALSE;
}
}
if (bLBtnDown == TRUE && bLBtnUp == FALSE)
{
Point pt;
pt.x = x;
pt.y = y;
Mat Local_Image = Image.clone();
rectangle(Local_Image, Corner1, pt, Scalar(, , )); imshow("Cropping app", Local_Image);
}
if (bLBtnDown == TRUE && bLBtnUp == TRUE)
{
box.width = abs(Corner1.x - Corner2.x);
box.height = abs(Corner1.y - Corner2.y);
box.x = min(Corner1.x, Corner2.x);
box.y = min(Corner1.y, Corner2.y);
Mat crop(Image, box);
Mat Temp;
ColorReduce(crop, Temp, , );
namedWindow("Crop");
imshow("Crop", Temp);
bLBtnDown = FALSE;
bLBtnUp = FALSE; }
} #pragma endregion
#pragma region 滑竿空间操作
VOID On_TrackBar(int Pos, VOID*)
{
if (Pos <= )
{
Result = Image;
}
else
{
ColorReduce(Image, Result, Pos, );
}
imshow("显示结果", Result);
}
#pragma endregion #pragma region 色素操作 VOID ColorReduce(Mat& InputImage, Mat& OutputImage, int div, int Func)
{ if (Func == )
{
OutputImage = InputImage.clone();
int Rows = OutputImage.rows;
int Cols = OutputImage.cols * OutputImage.channels();
if (OutputImage.isContinuous())
{
Cols *= Rows;
Rows = ;
}
for (int i = ;i < Rows;i++)
{
UCHAR* Data = InputImage.ptr<UCHAR>(i);
UCHAR* DataOut = OutputImage.ptr<UCHAR>(i);
for (int j = ;j < Cols;j++)
{
Data[j] = DataOut[j] / div*div + div / ;
}
}
}
else
{
OutputImage = InputImage.clone();
int Rows = OutputImage.rows;
int Cols = OutputImage.cols;
for (int i = ;i < Rows;i++)
{
for (int j = ;j < Cols;j++)
{
OutputImage.at<Vec3b>(i, j)[] = - OutputImage.at<Vec3b>(i, j)[];
OutputImage.at<Vec3b>(i, j)[] = - OutputImage.at<Vec3b>(i, j)[];
OutputImage.at<Vec3b>(i, j)[] = - OutputImage.at<Vec3b>(i, j)[]; }
}
} }
#pragma endregion VOID Sub_1()
{ Mat Image, Result;
cout << "Size: " << Image.size().height << "," << Image.size().width << endl;
Image = imread("1.jpg");
if (!Image.data)
{ cout << "Read Data Failed" << endl;
}
namedWindow("Ortginal Image");
imshow("Ortginal Image", Image);
flip(Image, Result, );
namedWindow("Output Image");
imshow("Output Image", Result);
waitKey();
}
OpenCV 学习的更多相关文章
- opencv学习笔记(七)SVM+HOG
opencv学习笔记(七)SVM+HOG 一.简介 方向梯度直方图(Histogram of Oriented Gradient,HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子 ...
- opencv学习笔记(六)直方图比较图片相似度
opencv学习笔记(六)直方图比较图片相似度 opencv提供了API来比较图片的相似程度,使我们很简单的就能对2个图片进行比较,这就是直方图的比较,直方图英文是histogram, 原理就是就是将 ...
- opencv学习笔记(五)镜像对称
opencv学习笔记(五)镜像对称 设图像的宽度为width,长度为height.(x,y)为变换后的坐标,(x0,y0)为原图像的坐标. 水平镜像变换: 代码实现: #include <ios ...
- opencv学习笔记(四)投影
opencv学习笔记(四)投影 任选了一张图片用于测试,图片如下所示: #include <cv.h> #include <highgui.h> using namespace ...
- opencv学习笔记(三)基本数据类型
opencv学习笔记(三)基本数据类型 类:DataType 将C++数据类型转换为对应的opencv数据类型 OpenCV原始数据类型的特征模版.OpenCV的原始数据类型包括unsigned ch ...
- opencv学习笔记(二)寻找轮廓
opencv学习笔记(二)寻找轮廓 opencv中使用findContours函数来查找轮廓,这个函数的原型为: void findContours(InputOutputArray image, O ...
- opencv学习笔记(一)IplImage, CvMat, Mat 的关系
opencv学习笔记(一)IplImage, CvMat, Mat 的关系 opencv中常见的与图像操作有关的数据容器有Mat,cvMat和IplImage,这三种类型都可以代表和显示图像,但是,M ...
- paper 93:OpenCV学习笔记大集锦
整理了我所了解的有关OpenCV的学习笔记.原理分析.使用例程等相关的博文.排序不分先后,随机整理的.如果有好的资源,也欢迎介绍和分享. 1:OpenCV学习笔记 作者:CSDN数量:55篇博文网址: ...
- (转) OpenCV学习笔记大集锦 与 图像视觉博客资源2之MIT斯坦福CMU
首页 视界智尚 算法技术 每日技术 来打我呀 注册 OpenCV学习笔记大集锦 整理了我所了解的有关OpenCV的学习笔记.原理分析.使用例程等相关的博文.排序不分先后,随机整理的 ...
- OpenCV学习笔记(一)安装及运行第一个OpenCV程序
1.下载及安装 OpenCV是一套开源免费的图形库,主要有C/C++语言编写,官网: http://opencv.org/ .在 http://opencv.org/downloads.html 可以 ...
随机推荐
- mac安装 Vitual box 虚拟机(window8.1)
首先到Oracle官网下载oracle VM VB,这是一个开源的免费项目,如果你想要了解更多的话甚至可以下载它的source code http://www.oracle.com/technetwo ...
- Java中的四舍五入
经典案例分析:public class RoundTest { public static void main(String[] args) { System.err.printl ...
- webpack配置命令
从2015年开始,webpack就是当前最火的构建工具.跟着时代向前走.准没错.我们要追随大神的脚步.走在前端技术栈的前列.大神等等我. 由于webpack是基于nodejs环境下的.所以先安装nod ...
- Highcharts动态添加点数据
Highcharts用来作为图表数据的展示十分方便,效果也比较好.highcharts不仅可以实现死数据的展示,也能实现动态数据的实时添加显示,类似财经股票的实时刷新效果,实现过程并不难,大致如下. ...
- linux文件权限查看及修改(实用)
查看Linux文件的权限:ls -l 文件名称 查看linux文件夹的权限:ls -ld 文件夹名称(所在目录) 修改文件及文件夹权限: sudo chmod -(代表类型)×××(所有者)×××(组 ...
- 关于xml配置实现AOP的小知识
除了前面介绍的基于JDK1.5的注解方式来定义切面,切入点和增强处理外,Spring AOP也允许直接使用XML配置文件来管理它们.在JDK1.5之前,只能使用配置文件的方式来管理,在Spring2. ...
- Android 6.0权限改变
对于6.0以下的权限及在安装的时候,根据权限声明产生一个权限列表,用户只有在同意之后才能完成app的安装,造成了我们想要使用某个app,就要默默忍受其一些不必要的权限(比如是个app都要访问通讯录.短 ...
- mysql的操作
关系型数据库是表格形式,比普通文件存储访问数据的速度更快,更容易查阅和提取满足特定条件的数据 关系数据库具有内置的权限系统 每一条数据对应唯一的标识 1,打开XAMPP继承的数据库 打开mysql ...
- 阿里的maven私服
<mirror> <id>nexus</id> <mirrorOf>*</mirrorOf> <url>http://maven ...
- 三代PacBio reads纠错 - 专题
三代纠错的重要性不言而喻,三代的核心优势就是长,唯一的缺点就是错误率高,但好就好在错误是随机分布的,可以通过算法解决,这也就是为什么现在有这么多针对三代开发的纠错工具. 纠错和组装是分不开的,纠错就是 ...