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 可以 ...
随机推荐
- No module named 'urllib2'
import urllib2 response = urllib2.urlopen('http://www.baidu.com/') html = response.read() print html ...
- Python3基础 创建一个空列表,一个空元组
镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...
- XMLHttpRequest简介
要真正实现这种绚丽的奇迹,必须非常熟悉一个 JavaScript 对象,即 XMLHttpRequest. 下面给出将要用于该对象的很少的几个 方法和属性. ·open():建立到服务器的新请求. · ...
- html5移动端知识点总结
第一章,控制html字体大小 1.1使用媒体查询,不同分辨率设置不同的html的font-size @(min-width:320px){ html{font-size:10px;} } @(mi ...
- 。U盘安装CentOS6.5
最近着手自学Linux,网上有很多CentOS的各种版本,但查阅到的教程基本都是关于CentOS6的,本着最新的版本并不一定是最适合的版本的原则,我选择安装CentOS6.5.安装系统稍微不注意就会出 ...
- python之路1(初识python)
python简史: python我认为特性就是简洁,灵活,高效. python重要版本: python1991年问世, python2.4:2004,同年django框架诞生. python2.6:2 ...
- a error of misunderstanding
Last summer vacation, a classmate contacted with me and we finished a intelligent car project with i ...
- 新手用git
最近几天用到了git,作为只看过教程,没有在实际项目中使用过的人来说,简直是 T_T ...... 在这里记录一下,以防以后忘记. clone : 本地没有该库,从远程repository拷贝到本地 ...
- HBase的Write Ahead Log (WAL) —— API与基本概念
HBase的数据写入操作,会先记录到HLog中,再真正写入到MemStore中.前者是对写入友好的格式,后者是对查询友好的格式.所以前者吞吐量更高,写入成功率大,提高了系统的可靠性,“基本”可以实现宕 ...
- RStudio相关
1.设置默认目录,tool-Global Options,设定后要重启RStudio才能生效2.Ctrl+l清屏控制台3.↑健.回忆前一条命令,↓健相反4.Ctrl+↑,查找相应前缀的历史记录5.创建 ...