#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. android Json Gson FastJson 解析

    一 Json xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:a ...

  2. windows页面打印div(弹出新页面)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...

  3. REVERSE

    REVERSE函数,刚刚接触,这是一个Oracle和MS Sql都能用的,不知道是不是T-SQL标准的函数,反正能用,挺好 SELECT REVERSE('abcd') 结果为dcba,就是把字符串反 ...

  4. JITComVCTK无法访问

    源代码第一次加载时会遇到JITComVCTK无法访问的问题,这是因为没有注册该第三方插件,需要到文件夹"\CommonFiles\dll\JITComVCTK"下注册,具体方式: ...

  5. 24SQL

    create  or  replace  function f_op (p_n1  number , p_op  varchar2 , p_n2  number )  return  number a ...

  6. 【leetcode❤python】 204. Count Primes

    #-*- coding: UTF-8 -*- #Hint1:#数字i,i的倍数一定不是质数,因此去掉i的倍数,例如5,5*1,5*2,5*3,5*4,5*5都不是质数,应该去掉#5*1,5*2,5*3 ...

  7. python走起之第十一话

    Redis redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorte ...

  8. 1005. Spell It Right (20)

    Given a non-negative integer N, your task is to compute the sum of all the digits of N, and output e ...

  9. pandas处理数据1

    读文件 pd.read_csv('path/to/file.txt',header=0,names='ab',index_col=0) names Columns这个可以不写,制定索引列是第一列,这样 ...

  10. oracle中trim,ltrim,rtrim函数用法

    该函数共有两种作用:第一种,即大家都比较熟悉的去除空格.例子:--TRIM去除指定字符的前后空格SQL> SELECT TRIM(' dd df ') FROM dual;TRIM('DDDF' ...