颜色缩减(带Trackbar)【从毛星云Opencv3编程入门P75 P111例程改编】
2015-08-16 16:47
253 查看
最近学了点opencv,买了毛星云的书,大力推荐哦。
颜色缩减,自己加了个Trackbar看起来更直观一些。
我一般自己先看一遍程序,脑子里有个大概印象了,再自己写一遍,这样出了错误会印象更深刻。
1. Mat.type( )括号不能丢
2. Mat.channels()括号不能丢
3.创建Trackbar的函数createTrackbar(TrackbarName, WINDOWNAMAE, &sliderValue, maxSliderValue,onTrackbar);
这里onTrackbar是一个回调函数,写在creatTrackbar里时,不用()
在写这个函数时,是要加括号的,调用时候也是哦,
onTrackbar(int , void*)
int 实slierValue,void* 填0貌似就可以了
4. 创建Trackbar之前,一定要
namedWindow(WINDOWNAME, 1);
如果没有此句,就不显示Trackbar,很重要哦 ,这里我犯了错。
char TrackbarName[50];
sprintf(TrackbarName, "颜色缩减值%d",divslider);
这句是用来显示滑动条上说明文字,还是加上比较好。
5. 自己画蛇添足地在onTrackbar 回调函数上加了个while(1),其实不用啦!
6. 颜色缩减函数很容易懂,就不说了。不过不太明白为啥要 data[j] = data[j] / div*div+div/2 这个div/2我不太懂。没有用div/2 也好用来着。
代码如下,要先在工程文件里有个“dota.jpg”
颜色缩减,自己加了个Trackbar看起来更直观一些。
我一般自己先看一遍程序,脑子里有个大概印象了,再自己写一遍,这样出了错误会印象更深刻。
1. Mat.type( )括号不能丢
2. Mat.channels()括号不能丢
3.创建Trackbar的函数createTrackbar(TrackbarName, WINDOWNAMAE, &sliderValue, maxSliderValue,onTrackbar);
这里onTrackbar是一个回调函数,写在creatTrackbar里时,不用()
在写这个函数时,是要加括号的,调用时候也是哦,
onTrackbar(int , void*)
int 实slierValue,void* 填0貌似就可以了
4. 创建Trackbar之前,一定要
namedWindow(WINDOWNAME, 1);
如果没有此句,就不显示Trackbar,很重要哦 ,这里我犯了错。
char TrackbarName[50];
sprintf(TrackbarName, "颜色缩减值%d",divslider);
这句是用来显示滑动条上说明文字,还是加上比较好。
5. 自己画蛇添足地在onTrackbar 回调函数上加了个while(1),其实不用啦!
6. 颜色缩减函数很容易懂,就不说了。不过不太明白为啥要 data[j] = data[j] / div*div+div/2 这个div/2我不太懂。没有用div/2 也好用来着。
代码如下,要先在工程文件里有个“dota.jpg”
#include <opencv2/opencv.hpp> #include<highgui.hpp> using namespace cv; using namespace std; #define WINDOWNAME "dstImg" int maxdiv = 255; Mat dstImg,srcImg; int divslider; void colorReduce(Mat& src, Mat& dst, int div); void on_Trackbar(int ,void*); int main(){ divslider = 20; srcImg = imread("dota.jpg", 1); dstImg.create(srcImg.cols,srcImg.rows, srcImg.type()); imshow("srcImg", srcImg); namedWindow(WINDOWNAME, 1);//如果没有此句,就不显示Trackbar。 char TrackbarName[50]; sprintf(TrackbarName, "颜色缩减值%d",divslider); createTrackbar("reduce div", WINDOWNAME, &divslider, maxdiv, on_Trackbar); on_Trackbar(divslider, 0); waitKey(0); return 0; } void on_Trackbar(int, void*){ if (divslider > 0){ colorReduce(srcImg, dstImg, divslider); imshow(WINDOWNAME, dstImg); } } void colorReduce(Mat& src, Mat& dst, int div){ dst = src.clone(); int rowNum = dst.rows; int colNum = dst.cols * dst.channels(); for (int i = 0; i < rowNum; i++){ uchar* data = dst.ptr<uchar>(i); for (int j = 0; j < colNum; j++) data[j] = data[j] / div*div; } }
相关文章推荐
- Qt-Style-Sheets-语法
- C++: 继承与派生
- Spring Web Flow 学习笔记(2)-流程的组件
- qt Qstring 转 char*
- HW-IP合法性_Java
- Qt Style Sheets--简介
- Java学习学习之路0801<复习>(抽象类、日期Date、接口)
- C++基础---多维数组
- 用C / C++ 实现快速排序
- 黑马程序员——C语言之数组
- 2015年华为提前招聘机试题--输出最大的三位数
- Eclipse 一直提示 loading descriptor for 的解决方法(转)
- django-rest-framework指南(3):Class Based Views(类视图)
- Jedis存储Java对象--Java序列化为byte数组方式
- phpcms v9的一些问题
- C++语言基础 (正在扩充中)
- Google APAC 2016 University Graduates Test(google校招笔试)
- C++函数的重载、覆盖和隐藏区别
- Hive启动报错无法找到class— java.lang.NoClassDefFoundError
- JavaWeb项目中WEB-INF目录下class文件自动生成以及显示