雕刻时光

just do it……nothing impossible
随笔 - 547, 文章 - 0, 评论 - 82, 阅读 - 86万
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

01 2014 档案

摘要:图像处理里面缩放操作是比较常见的: 最近邻插值:类似简单映射的处理方式,目标图像w1,h1,原始图像w0,h0,则在目标图像上的点(x,y)的像素点实际对应原始图上(x*w0/w1,y*h0/h1)的像素点。优点是速度快,操作简单;缺点是图片会产生锯齿状。 线性插值:对周围的点通过不同权值的乘积,使目标点的像素会受到周围像素的影响,过度更加自然些,即不会产生锯齿状。 对于一个目的像素,设置坐标通过反向变换得到的浮点坐标为(i+u,j+v) (其中i、j均为浮点坐标的整数部分,u、v为浮点坐标的小数部分,是取值[0,1)区间的浮点数),则这个像素得值 f(i+u,j+v) 可由原图像中坐... 阅读全文

posted @ 2014-01-27 11:27 huhuuu 阅读(3122) 评论(0) 推荐(0) 编辑

摘要:在图像处理里,如果我们需要填充一个区域,使该区域为相同的颜色,则比较常用的是洪水填充法。洪水填充法可以用DFS也可以用BFS实现。 opencv下有函数实现该功能: CVAPI(void) cvFloodFill( CvArr* image, CvPoint seed_point, CvScalar new_val, CvScalar lo_diff CV_DEFAULT(cvScalarAll(0)), CvScalar up_diff CV_DEFAULT(cvScalarAll(... 阅读全文

posted @ 2014-01-24 19:06 huhuuu 阅读(7375) 评论(0) 推荐(0) 编辑

摘要:为了处理更为复杂的情况,opencv中还支持更多的形态学变换。形态学名称操作过程操作名称是否需要temp参数开操作 openopen(src)=先腐蚀,后膨胀CV_MOP_OPEN否闭操作 closeclose(src)=先膨胀,后腐蚀CV_MOP_CLOSE否形态梯度 gradientgradient(src)=dilate(scr)-erode(src)CV_MOP_GRADIENT总是“礼帽” topHattopHat(src)=src-open(src)CV_MOP_TOPHATsrc=dst的时候需要“黑帽”blackHatblackHat(src)=close(src)-src.. 阅读全文

posted @ 2014-01-21 22:39 huhuuu 阅读(5615) 评论(0) 推荐(0) 编辑

摘要:腐蚀膨胀是图像形态学比较常见的处理,腐蚀一般可以用来消除噪点,分割出独立的图像元素等。 一般腐蚀操作对二值图进行处理,腐蚀操作如下图,中心位置的像素点是否与周围领域的像素点颜色一样(即是否是白色点,即值是否为255),若一致,则保留,不一致则该点变为黑色(值即为0) opencv中的腐蚀操作:CVAPI(void) cvErode( const CvArr* src, CvArr* dst, IplConvKernel* element CV_DEFAULT(NULL), int iteratio... 阅读全文

posted @ 2014-01-21 20:53 huhuuu 阅读(28440) 评论(0) 推荐(1) 编辑

摘要:以前的时候,为了过滤图像中的一些噪点,学过一些简单的滤波,比如中值滤波,均值滤波,也是自己实现的。 在opencv中有现成的函数可以调用,实现滤波的操作。 函数的原型如下:CVAPI(void) cvSmooth( const CvArr* src, CvArr* dst, int smoothtype CV_DEFAULT(CV_GAUSSIAN), int size1 CV_DEFAULT(3), int size2 CV_DEFAULT(0), ... 阅读全文

posted @ 2014-01-21 15:52 huhuuu 阅读(19483) 评论(2) 推荐(2) 编辑

摘要:鼠标事件采用回调函数的形式,即需要鼠标处理点击移动事件的话,首先必须创建一个回调函数。 如下形式:void my_mouse_callback( //回调函数的声明,而回调函数也是需要这种参数格式 int event,int x,int y,int flags,void * param ); 第一个参数是表示鼠标的事件类型,如左键按下去,左键回上来,鼠标移动等。 有如下类型: x,y表示现在鼠标所处的位置, flags表示鼠标事件标志: 最后一个额外的指针,可以传递你所需要的数据指针,这里用来传递image的指针。 下面是注册回调函数到opencv中,... 阅读全文

posted @ 2014-01-21 11:07 huhuuu 阅读(1043) 评论(0) 推荐(0) 编辑

摘要:一般我们需要对图像直接进行操作的时候,需要知道图像存储的数据结构,这要也就知道了它的遍历方式在opencv2.4.4版本下,IplImage的数据结构如下(貌似在别的版本下差别也不会太大)其中比较重要的是width,height,imageData,widthStep。(其他的刚开始学也知道的不多- -)width,height 就是表示图像的宽度,高度,imageData是一个指向某内存空间的指针,该内存空间里面存放了图像实际像素点的颜色信息(这里是RGB信息)widthstep图像一行像素点所占的字节数,这里是三通道,所以这时widthstep =width * 3知道的上面的基本变量以后 阅读全文

posted @ 2014-01-20 16:52 huhuuu 阅读(6723) 评论(0) 推荐(0) 编辑

摘要:对实时的视屏流进行处理,实质还是对单幅图片进行处理! #include "stdafx.h"#include "cv.h"#include "highgui.h"int g_slider_position = 0;CvCapture * g_capture =NULL;void onTrackbarSlide(int pos){ //再拖动滚动条的时候,滚动条的位置会被作为int数字传入 cvSetCaptureProperty( g_capture, CV_CAP_PROP_POS_FRAMES, pos );} v... 阅读全文

posted @ 2014-01-18 21:21 huhuuu 阅读(766) 评论(0) 推荐(0) 编辑

摘要:视屏的本质是一些静态的图像的集合,opencv可以不断读取视屏中的图片,显示,就产生了类似电影的效果。 这样也就可以通过opencv对实时的视屏流进行处理了。#include "stdafx.h"#include "cv.h"#include "highgui.h"int main(){ cvNamedWindow("Example2",CV_WINDOW_AUTOSIZE);//申请可以自动调节大小的窗口Example1 CvCapture *capture=cvCreateFileCapture("F 阅读全文

posted @ 2014-01-18 16:14 huhuuu 阅读(4706) 评论(0) 推荐(0) 编辑

摘要:opencv是个开源的图像处理的库,小到基本的图像处理函数,如图像移动放大缩小,大到人脸识别,部分机器学习的知识,所以是个学习的不错的库。之前有图像处理的知识,这次再学习下这个开源库。 先上基础的图像读取与显示:#include "stdafx.h"#include "cv.h"#include "highgui.h"int main(){ IplImage *img= cvLoadImage("C:/13.jpg");//读取图片 cvNamedWindow("Example1",CV_WIN 阅读全文

posted @ 2014-01-18 15:18 huhuuu 阅读(490) 评论(0) 推荐(0) 编辑

摘要:在写CPP的时候,常常要写using namespace std;这么一句话,到底有什么用呢?#include namespace first{ double var = 5;}namespace second { double var = 10;}int main () { std::cout << "5 plus 10 equals " << first::var + second::var << std::endl ; std::cin.get(); return 0;} 我们可以使用同一个变量名,只要在它们之前加上namespac 阅读全文

posted @ 2014-01-11 13:50 huhuuu 阅读(1321) 评论(0) 推荐(0) 编辑

摘要:在脑海中一直有个疑问,在网络上发送信息的时候为什么既要有IP地址还要有MAC地址,IP是唯一的,MAC地址也是唯一的,用一个难道不行么? 既然每个以太网设备在出厂时都有一个唯一的MAC地址了,那为什么还需要为每台主机再分配一个IP地址呢?或者说为什么每台主机都分配唯一的IP地址了,为什么还要在网络设备(如网卡,集线器,路由器等)生产时内嵌一个唯一的MAC地址呢?主要原因有以下几点:(1)IP地址的分配是根据网络的拓朴结构,而不是根据谁制造了网络设置。若将高效的路由选择方案建立在设备制造商的基础上而不是网络所处的拓朴位置基础上,这种方案是不可行的。(2)当存在一个附加层的地址寻址时,设... 阅读全文

posted @ 2014-01-08 20:45 huhuuu 阅读(3078) 评论(0) 推荐(0) 编辑

摘要:有错误欢迎批评指正!谢谢!1.当一个类继承另一个类的时候,子类构造函数与析构函数在自己的类中不需要显示调用父类的构造函数与析构函数2.当一个类继承另一个类的时候,子类的拷贝构造函数需要显示的调用父类的拷贝构造函数,且必须按初始化的方式调用!3.当一个类继承另一个类的时候,子类的赋值函数也需要显示的调用父类的赋值函数#includeusing namespace std;int i=1;class base{public: base(){ valueBase=i; i++; valueBase2=i; i++; prin... 阅读全文

posted @ 2014-01-03 10:37 huhuuu 阅读(1497) 评论(0) 推荐(0) 编辑

摘要:转自:http://www.cnblogs.com/dwdxdy/archive/2012/07/17/2594993.html在C++中,调用拷贝构造函数有三种情况:1.一个对象作为函数参数,以值传递的方式传入函数体.2.一个对象作为函数返回值,以值传递的方式从函数返回.3.一个对象用于给另外一个对象进行初始化(复制初始化).拷贝构造函数必须以引用的形式传递(参数为引用值).其原因如下:当一个对象以传递值的方式传一个函数的时候,拷贝构造函数自动的调用来生成函数中的对象.这样会导致无限循环地调用拷贝构造函数,直至栈溢出.以前,一直有个误解,以为以同类型的对象调用"="时,就 阅读全文

posted @ 2014-01-02 21:44 huhuuu 阅读(246) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示