计算机与机器视觉
文章平均质量分 65
记录机器视觉、模式识别、图像处理、OpenCV学习过程中的点点滴滴。
Hao_09
这个作者很懒,什么都没留下…
展开
-
Halcon/MFC混合编程入门
为方便初学者,尽量写的详细。一 新建一个项目,命名为halconVC,步骤如下:二 配置MFC/halcon编程环境1 在 项目-》属性-》c/c++-》常规的 附加包含目录中加入 "$(HALCONROOT)/include/cpp";"$(HALCONROOT)/include"2 在 项目-》属性-》连接器》常规的附加库目录 加入$(HALCONR原创 2016-01-18 21:13:27 · 12437 阅读 · 6 评论 -
ICP算法(Iterative Closest Point迭代最近点算法)
最近在做点云匹配,需要用c++实现ICP算法,下面是简单理解,期待高手指正。ICP算法能够使不同的坐标下的点云数据合并到同一个坐系统中,首先是找到一个可用的变换,配准操作实际是要找到从坐标系1到坐标系2的一个刚性变换。ICP算法本质上是基于最小二乘法的最优配准方法。该算法重复进行选择对应关系点对, 计算最优刚体变换,直到满足正确配准的收敛精度要求。ICP 算法的目的是要找到待配准点原创 2015-12-01 21:09:15 · 44034 阅读 · 5 评论 -
OpenCV二值化cvThreshold和自适应二值化cvAdaptiveThreshold及Otsu
阈值化函数:double cvThreshold(constCvArr* src, CvArr* dst, double threshold, double max_value,int threshold_type)参数: src –原始数组 (单通道 , 8-bit of 32-bit 浮点数)。dst –输出数组,必须与 src 的类型一致,或者为 8-bit。thre原创 2015-04-03 11:45:02 · 26302 阅读 · 0 评论 -
【OpenCV】基本数据类型
CvPoint 二维坐标系下的点,类型为整型 typedef struct CvPoint{ intx;/* X坐标,通常以为基点*/ inty;/* y坐标,通常以为基点*/}CvPoint;/* 构造函数*/inline CvPoint cvPoint(int x,int y );/* 从CvPoint2D原创 2015-04-10 17:06:47 · 1590 阅读 · 0 评论 -
【OpenCV】IplImage和char *的相互转换,以及极易忽视的细节
OpenCV中IplImage和单字节char*的相互转换从 IplImage到 char* :data = image->imageData //对齐的图像数据 或者data = image->imageDataOrigin //未对齐的原始图像数据从 char* 到 IplImage:image =cvCreateImageHeader(cvSize(width,h原创 2015-04-13 14:45:03 · 7723 阅读 · 0 评论 -
【OpenCV】图像的内存分配与释放以及复制图像
(1) 分配内存给一幅新图像:IplImage* cvCreateImage( CvSize size, int depth, int channels );size -图像宽、高. depth -图像元素的位深度,可以是下面的其中之一: IPL_DEPTH_8U - 无符号8位整型 IPL_DEPTH_8S - 有符号8位原创 2015-04-14 10:58:14 · 6494 阅读 · 0 评论 -
【OpenCV】简单高效地访问图像像素
对于单通道字节型图像:IplImage* img = cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1);int height = img->height;int width = img->width;int step = img->widthStep;uchar* data = (uchar *)img->原创 2015-04-14 11:14:10 · 1621 阅读 · 0 评论 -
【OpenCV】复制、切割出图像ROI区域
举例:#include #include using namespace cv;// 从一幅大图像中,取出一小块图像。int main(){ /* 读取大图像 */ IplImage *img1 = cvLoadImage("C:\\Users\\Liu\\Desktop\\a2.bmp", -1); cvNamedWindow("Cut", CV_WINDOW_AUTOSIZ原创 2015-04-15 12:48:15 · 5424 阅读 · 0 评论 -
【OpenCV】图像金字塔详解及编程实现
图像金字塔被广泛用于各种视觉应用中。图像金字塔是一个图像集合,集合中所有的图像都源于同一个原始图像,而且是通过对原始图像连续降采样获得,直到达到某个中止条件才停止降采样。有两种类型的图像金字塔常常出现在文献和应用中:高斯金字塔和拉普拉斯金字塔。高斯金字塔用来向下降采样图像,而拉普拉斯金字塔则用来从金字塔低层图像中向上采样重建一个图像。void cvPyrDown( const CvArr* s原创 2015-04-17 17:09:25 · 3997 阅读 · 0 评论 -
【OpenCV】图像旋转详解,边缘用黑色填充
项目要用到图像旋转,OpenCV里面居然没有专门封装好的函数,只好自己写了。根据《learnning OpenCV》发现效果不是很理想,旋转后图像大小不变,可是图像却被裁减了。例子如下:int main( int argc, char** argv ){ IplImage* src=cvLoadImage("C:\\Users\\Liu\\Desktop\\bridge.bmp",1)原创 2015-04-17 20:55:36 · 8579 阅读 · 1 评论 -
收集的图像处理网站http://blog.csdn.net/chief1985/article/details/1898358
图像处理相关网站图像处理教学网站(英文)http://www.imageprocessingplace.com/朱虹图像工作室http://xautdiph.51.net/Files/LinkFile/Index.htm中国图像图像学会http://www.csig.org.cn/中国图像图形网http://www.image2003.com/中国图像图形学报转载 2013-11-03 14:26:35 · 2049 阅读 · 0 评论 -
一些机器视觉网站
(转)http://blog.csdn.net/gaochangxin/article/details/1476619Computer Vision Computer Vision Homepage, Carnegie Mellon Universitywww.cs.cmu.edu/~cil/vision.html Annotated Computer Vision B转载 2013-11-03 14:40:36 · 1306 阅读 · 0 评论 -
冈萨雷斯图像处理Matlab函数汇总
转http://blog.csdn.net/tzgj2007/article/details/6877800colorbar 显示彩条getimage 由坐标轴得到图像数据ice(DIPUM) 交互彩色编辑image 创建和显示图像对象imagesc 缩放数据并显示为图像immovie 由多帧图像制作电转载 2013-11-03 19:14:41 · 4510 阅读 · 0 评论 -
数字图像处理图库
做数字图像处理 的,怎能没有一个图库?虽说自己可以建立,可是如果是比较知名的图库,做出来的实验结果才能比较让人信服。coral是很有名,可他要收费。我寻寻觅觅, 还是找到了一些图库,有的是纯texture图库,比如著名的vistex,有的是faceimages,有的也有RGB真彩色图的。下面罗列了一些 url,可以找到对应的。 1、http://vismod.media.mit.edu/转载 2013-11-04 19:45:06 · 1789 阅读 · 0 评论 -
vc++数字图像处理 自适应二值化程序
void GrayTrans::Binary(){ long i,j; unsigned char pixel; long lHistogram[256];//直方图数组 //定义阈值,最大最小灰度值,平均阈值 unsigned char iThreshold,iNewThreshold,iMaxGrayValue,iMinGrayValue,原创 2013-11-10 14:26:49 · 2115 阅读 · 0 评论 -
双线性插值
unsigned char Task::Interpolation (unsigned char *lpDIBBits, LONG lWidth, LONG lHeight, FLOAT x, FLOAT y){ LONG i1, i2; LONG j1, j2; unsigned char f1, f2, f3, f4; unsigned char f12, f34;原创 2013-11-11 22:06:14 · 989 阅读 · 0 评论 -
vc将彩色图像转换为灰度图像
void GrayTrans::ColorToGray(){ if (m_nBitCount==8) { return ; } if (m_pImgDataOut!=NULL) { delete []m_pImgDataOut; m_pImgDataOut=NULL; } if (m_lpColorTableOut!=NULL) { delete []m_lp原创 2013-12-16 22:28:57 · 1819 阅读 · 0 评论 -
vc对图像进行平移,转置等几何变换
//平移变换void GeometryTrans::Move(int offsetX, int offsetY){ if (m_pImgDataOut!=NULL) { delete []m_pImgDataOut; m_pImgDataOut=NULL; } m_nBitCountOut=m_nBitCount; m_nColorTableLengthOut=ComputeC原创 2013-12-16 22:35:22 · 1730 阅读 · 0 评论 -
数字图像相关基础知识
1 图像 在机器视觉里,图像是基本的数据结构,它所包含的数据通常是由图像采集设备传送到计算机的内存中的。为处理所以可能的应用,图像可以视为一组任意多的通道组成的。 一般将图像通道看做是一个二维数组,在像素(r, c)处的灰度值可以被解释为矩阵 中的一个元素。在几乎所有的情况下,图像采集设备不但在空间上把图像离散化,同时也会把灰度值离散化到某一固定的灰度级范围内。原创 2014-02-28 18:55:13 · 1796 阅读 · 0 评论 -
图像分割
1 固定阈值分割S为输出,R为感兴趣区域。效果如下: 2 自适应阈值分割 这里主要用了迭代法,和大津发进行阈值分割,效果如下:迭代 大津 这里可以看出自适应阈值分割取得了比较好的效果,可是还是会有少量噪声,还需要进一步滤波。迭代法的基本思想是基于灰度直方图,一某一阈值将灰度直方图分割成两边,然后分别求阈值两边的平原创 2014-02-28 19:40:20 · 1287 阅读 · 0 评论 -
直方图平滑
一个好的阈值应该对应着直方图中两个峰之间的最小值。但是,由于灰度直方图中的随机波动,两个峰尖的最大值和他们之间谷底的最小值都不能被很好的确定。所以需对直方图进行平滑处理。这里用高斯平滑。void Thresholding::ComputeHist(){ if (m_nBitCount!=8) { return; } for (int i=0; i<256; i++) { m_原创 2014-02-28 20:01:52 · 8828 阅读 · 0 评论 -
双线性插值函数的形状
运用双线性插值函数可以将图像的离散表示近似转化为一个连续函数,双线性插值函数是一个连续的曲面z=y(xg11+(1-x)g01)+(1-y)(xg10+(1-x)g00) g00, g01, g10, g11是相邻四个像素点的灰度值 这里可以令: g00=10 g01=40 g10=100 g11=80 则函数化简为: z=-50xy+90x+30y+10原创 2014-04-02 16:19:09 · 1363 阅读 · 0 评论 -
直方图均衡化原理及c++代码
//对图像进行灰度线性bianhBOOL CDibImage::LinerTrans(LPSTR lpDIBBits, LONG lWidth, LONG lHeight, FLOAT fA, FLOAT fB){ unsigned char*lpSrc; // 指向源图像的指针LONG i;// 循环变量LONG j;LONG lLineBytes;原创 2014-09-15 11:41:23 · 10741 阅读 · 1 评论 -
halcon模板匹配
* 在一个图片中获取ROI并在此图片中匹配 dev_close_window () dev_open_window (0, 0, 600, 600, 'black', WindowHandle) * 窗口语句 read_image(Image,'L:/Halcon test/mk2.jpg') *read_image(Image,'L:/Halcon test/mk3.jpg'转载 2014-09-22 20:34:25 · 5119 阅读 · 2 评论 -
亚像素阈值分割
亚像素精度阈值处理的结果可以用常量函数g(x,y)=threshold和图像函数f(r,c)相交得到。具体原理详见《机器视觉算法与应用》 3.4.3原创 2014-12-14 21:44:59 · 3555 阅读 · 0 评论 -
模板匹配之zernike矩
zernike矩具有旋转不变性,广泛用于目标识别模板匹配,抗噪能力强。zernike矩的原理就不过多赘述,上代码。 //求n的阶乘 long TemplateMatch::factorial(int n) { int result=1; while(n>1) { result *= n; n-=1; } r原创 2014-12-18 16:41:22 · 4974 阅读 · 12 评论 -
基于形状的模板匹配
前段时间一直在做图像模板匹配。需要对旋转模板进行匹配,并且对速度精度都有较高的要求。OpenCV里面并没有较好的解决方法。cvMatchTemplate( const CvArr* image, constCvArr* templ,CvArr* result,int method )Image 待搜索图像Templ 模板图像Result 匹配结果 用来存放通过以下方法计算出滑动窗原创 2015-03-25 21:06:27 · 23517 阅读 · 2 评论 -
圆投影匹配算法描述及实现
解决模板图和基准图之间存在任意角度旋转的景象匹配问题的关键是找到一个旋转不变量, 圆投影匹配算法就是利用“圆”的各向同性和投影特征提出来的。传统的图像匹配算法,如归一化交叉互相关算法,主要利用像素点与像素点之间的相关性计算匹配图像与模板之间的相关度。这种方法在匹配图像与模板之间存在一定选择角度的时候,正确率会随着旋转角度的增加而迅速下降。当旋转角度大于5度的时候就会完全失效。于是圆投影算法被提出。原创 2015-03-25 22:05:41 · 6278 阅读 · 13 评论 -
sobel算子实现边缘检测及其c++实现及与matlab效果对比
这里增加了对边缘像素的补齐。sobel梯度分割抗噪性好,但是无法做到自动阈值,是其一大遗憾,matlab却解决的很好。//默认对8位位图进行处理void Sobel(unsigned char *pIn, int width, int height, unsigned char *pOut){ //每行像素所占字节数,输出图像与输入图像相同 int lineByte=(wid原创 2015-04-08 11:37:04 · 8992 阅读 · 1 评论 -
亚像素边缘检测评述
转载请注明出处:http://blog.csdn.net/lsh_20131 引言数字图像的边缘检测是图像分割、目标识别、区域形状提取等图像处理领域的重要基础。在进行图像理解和分析时,第一步往往是边缘检测。目前边缘检测已经成为机器视觉领域最活跃的课题之一,其研究具有非常重要的理论意义和实际应用价值。传统的边缘检测方法的检测精度最高只能达到一个像素级,但是,随着科学技术的飞速发展,工业检原创 2015-04-10 16:17:02 · 19648 阅读 · 0 评论 -
图像色彩空间之RGB与HSI
根据颜色感知的角度来分类,颜色空间可考虑分成如下3类。1)混合型颜色空间:按3种基色的比例合成颜色。例如,RGB,CMY(K)和XYZ等颜色空间就属于这种类型。2)非线性亮度/色度型颜色空间:这种色彩空间的特点是用一个分量表示非色彩的感知,用两个独立的分量表示色彩的感知。当需要黑白图像时,这样的系统非常方便。例如,YUV等。3)强度/饱和度/色调型颜色空间:用饱和度和色度描述色彩的感知原创 2015-04-24 14:12:22 · 13746 阅读 · 0 评论 -
最小二乘法拟合多项式原理以及c++实现
最小二乘拟合曲线原理,以及c++详细代码,最后给出了测试用例,将一组数据拟合成二次曲线。原创 2015-06-30 16:45:28 · 38037 阅读 · 19 评论 -
sift算法c语言实现
前段时间在做三维测量方面的研究,需要得到物体表面三维数据,sift算法是立体匹配中的经典算法,下面是对RobHess的SIFT源代码的解析。部分内容参考网上,在这里向各位大神表示感谢! http://blog.csdn.net/lsh_2013/article/details/46620015原创 2015-07-10 09:19:08 · 7507 阅读 · 6 评论 -
相机模型详解
相机模型数码相机图像拍摄的过程实际上是一个光学成像的过程。相机的成像过程涉及到四个坐标系:世界坐标系、相机坐标系、图像坐标系、像素坐标系以及这四个坐标系的转换。理想透视模型——针孔成像模型相机模型是光学成像模型的简化,目前有线性模型和非线性模型两种。实际的成像系统是透镜成像的非线性模型。最基本的透镜成像原理如图所示:其中 u 为物距, f 为焦距,v 为相距。三者满足关系式原创 2015-08-13 17:32:38 · 44190 阅读 · 3 评论 -
张正友标定算法理论及算法实现
张正友标定算法理论及算法实现理论基础1999年,微软研究院的张正友提出了基于移动平面模板的相机标定方法。此方法是介于传统标定方法和自标定方法之间的一种方法,传统标定方法虽然精度高设备有较高的要求,其操作过程也比较繁琐,自标定方法的精度不高,张正友标定算法克服了这两者的缺点同时又兼备二者的优点,因此对办公、家庭的场合使用的桌面视觉系统(DVS)很适合。设三维世界中坐标的点为:原创 2015-08-13 20:55:17 · 25775 阅读 · 9 评论 -
图像匹配得到精确的旋转角度
当对平面物体进行视觉定位时,往往采用图像模板匹配的方式,然而当目标含有一定角度的旋转时,如何精确估算出旋转角度成了一个难题。下面是博主根据自己的理解所做的一个小的总结,也能算纠结,欢迎高手围观。1 基于灰度的模板匹配(NCC等) 用灰度模板进行模板匹配,往往耗时,并且要匹配含有旋转的目标,就需要建立多角度的模板。如果目标的角度范围是(-30°,30°),以1°为步幅,则需要60个模板原创 2015-08-14 10:01:53 · 37484 阅读 · 5 评论