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 可以 ...
随机推荐
- markdown 标识语言
打算改用markdown标记语言来写blog,特地收集了些相关的资料: 基本介绍: markdown 语法说明简明版 markdown 语法说明完整版 一些相应的资料: 知乎上相关的问题解答 mark ...
- svu update 遇到 Node remains in conflict
http://stackoverflow.com/questions/11774868/svn-checkout-without-restoring up vote4down votefavorite ...
- CSS3简单的小技巧:linear-gradient切角画册
关于linear-gradient的语法就不多做介绍了网上到处都是,下面看个小例 我们先做一个渐变,使其让他旋转, <div class="example"> < ...
- 获得本机IP,并且将ip放在CIpAdress里
char szHostName[MAX_PATH + 1]; gethostname(szHostName, MAX_PATH); //得到计算机名 hostent *p = gethostbynam ...
- Java Web之会话管理二:Session
一.Session 在web开发中,服务器可以为每个yoghurt浏览器创建一个会话对象(Session)对象.注意:一个浏览器独占一个Session对象.因此,在需要保存用户数据时,服务器程序可以把 ...
- Less环境搭建
1.在页面中加入 .less 样式表的链接,并将 rel 属性设置为 "stylesheet/less": <link rel="stylesheet/less&q ...
- 使用phpmailer发送smtp邮件时提示 SMTP Error: Could not authenticate 错误
使用phpmailer发送smtp邮件时提示 SMTP Error: Could not authenticate 错误 这个错误是验证出现错误, $mail->Port = 25; //SMT ...
- 参考__HTML5 Game
基础知识 TypeScript TypeScript 目录教程 Egret Egret II HTML5晃动DeviceMotionEvent事件 博客 html5tricks 库和框架 html5t ...
- apt-get 与 yum 的区别
一般来说著名的 linux 系统基本上分两大类: RedHat系列:Redhat.CentOS.Fedora等 Debian系列:Debian.Ubuntu等 RedHat 系列 1 常见的安装包格式 ...
- PHPStorm技巧篇 -- 全局搜索
自定义快捷键,找到search everywhere 我绑定的是alt+N 设置好并apply后,在项目中使用:快捷键alt+N ,输入自己需要查找的文件或类名或方法名,即可出现相应的选项. so c ...