#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 学习的更多相关文章

  1. opencv学习笔记(七)SVM+HOG

    opencv学习笔记(七)SVM+HOG 一.简介 方向梯度直方图(Histogram of Oriented Gradient,HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子 ...

  2. opencv学习笔记(六)直方图比较图片相似度

    opencv学习笔记(六)直方图比较图片相似度 opencv提供了API来比较图片的相似程度,使我们很简单的就能对2个图片进行比较,这就是直方图的比较,直方图英文是histogram, 原理就是就是将 ...

  3. opencv学习笔记(五)镜像对称

    opencv学习笔记(五)镜像对称 设图像的宽度为width,长度为height.(x,y)为变换后的坐标,(x0,y0)为原图像的坐标. 水平镜像变换: 代码实现: #include <ios ...

  4. opencv学习笔记(四)投影

    opencv学习笔记(四)投影 任选了一张图片用于测试,图片如下所示: #include <cv.h> #include <highgui.h> using namespace ...

  5. opencv学习笔记(三)基本数据类型

    opencv学习笔记(三)基本数据类型 类:DataType 将C++数据类型转换为对应的opencv数据类型 OpenCV原始数据类型的特征模版.OpenCV的原始数据类型包括unsigned ch ...

  6. opencv学习笔记(二)寻找轮廓

    opencv学习笔记(二)寻找轮廓 opencv中使用findContours函数来查找轮廓,这个函数的原型为: void findContours(InputOutputArray image, O ...

  7. opencv学习笔记(一)IplImage, CvMat, Mat 的关系

    opencv学习笔记(一)IplImage, CvMat, Mat 的关系 opencv中常见的与图像操作有关的数据容器有Mat,cvMat和IplImage,这三种类型都可以代表和显示图像,但是,M ...

  8. paper 93:OpenCV学习笔记大集锦

    整理了我所了解的有关OpenCV的学习笔记.原理分析.使用例程等相关的博文.排序不分先后,随机整理的.如果有好的资源,也欢迎介绍和分享. 1:OpenCV学习笔记 作者:CSDN数量:55篇博文网址: ...

  9. (转) OpenCV学习笔记大集锦 与 图像视觉博客资源2之MIT斯坦福CMU

          首页 视界智尚 算法技术 每日技术 来打我呀 注册     OpenCV学习笔记大集锦 整理了我所了解的有关OpenCV的学习笔记.原理分析.使用例程等相关的博文.排序不分先后,随机整理的 ...

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

    1.下载及安装 OpenCV是一套开源免费的图形库,主要有C/C++语言编写,官网: http://opencv.org/ .在 http://opencv.org/downloads.html 可以 ...

随机推荐

  1. java:IO流学习小结

    可以看以下内容学习一下: http://blog.csdn.net/zzp_403184692/article/details/8057693

  2. 安装rabbitMQ delayed-messaged

    由于一些原因,消息需要延迟发送给消费者,可以用delayed-messaged插件 在 /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.5/plugins目录下 # ...

  3. Mifare系列7-安全性(转)

    文/闫鑫原创转载请注明出处http://blog.csdn.net/yxstars/article/details/38087245 飞利浦的MIFARE卡 由于它的高安全性在市场上得到广泛应用,比如 ...

  4. T-SQL编程练习(带注释)

    use test; GO /*创建自定义函数的格式: * create function 函数名(参数 数据类型) * returns 返回数据类型 as * begin * 代码 * end */ ...

  5. Query Designer:变量的偏移 Variable Offset

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  6. Query Designer:Variable 变量

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  7. iscroll双重滚动,向上滚动隐藏一部分,下拉后显示

    最近项目需求:下面是页面,当用户向上滚动时候,[隐藏的]部分也向上滚动直至消失,这时候[标题]和[搜索框]在最顶部,而[内部的]可以继续滚动,而当[内部的]滚动到最顶部时候,也就是[这个是内部1]时候 ...

  8. Latex图片显示问题(1)

    用latex编译后,若用dvipdf生成pdf文件,则其中有个eps图的左侧会显示不完全:若是用dvips--pspdf生成pdf文件,图像显示没问题. 这种情况的问题出在,加载 graphicx 宏 ...

  9. Ubuntu 16.04安装搜狗输入法

    转载: http://www.it610.com/article/5319575.htm 打开firefox浏览器,输入网址www.baidu.com,打开后搜索搜狗拼音 linux进入到搜狗拼音li ...

  10. attr和prop区别

    今天写了个小程序,获取input[checked]属性,$('#check1').attr('checked'),结果返回undefined,查询了一番, 如果是具有true和false两个属性值的属 ...