2019-11-27 14:07:48
卷积模糊图像,图像边缘,增强图像常见卷积算子:Robert、sobel、拉普拉斯算子代码:#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>
using namespace cv;
int main(int argc,char ** argv)
{
M...
2019-11-27 14:04:23
阈值(threshold)简单地说就是把图像分割的一个标尺。阈值类型1.阈值二值化(threshold binary)大于阈值取最大值,小于阈值取最小值。2.阈值反二值化(threshold binary Interval)3.截断(truncate)超过阈值和阈值相等,否则为0.4.阈值取零(threshold to zero)小于阈值取0,大于的不变。5.阈值反取零(threshold to...
2019-11-27 13:20:03
说一说勇哥手中一下手机前盖对位压合设备的一些经验。对位的基本原理如下图,灰色部分是CG,手机外壳与CG之间有9组gap(间隙)。理论上,如果CG对位是完美的,则:Gap1-Gap6=0Gap2-Gap5=0Gap8-Gap3=0Gap7-Gap4=0实际上不可能为0,而是到达一个经验值范围就算对位完成。(图1)而且,由于手机比较大,我们通常使用四个CCD分别拍四个角的方式来工作,这样可以获得较好的...
2019-11-27 10:46:40
金字塔原理图像金字塔是一个图像集合,集合中所有的图像都源于同一个原始图像,而且通过对原始图像连续降采样获得。在图像处理中,常常会调整图像大小,最常见的就是放大和缩小。一个图像金字塔是一系列图像组成,最底下一张是图像尺寸最大,最上方的图像尺寸最小,从空间上从上向下看就像一个古埃及的金字塔。高斯金字塔–用来对图像进行降采样拉普拉斯金字塔–用来重建一张图片根据他的上层降采样图片。高斯金字塔:高斯金字塔是...
2019-11-27 10:42:32
在opencv\sources\samples下面提供了很多的官方例程,是学习OpenCV的最好的资源。视频教程地址:https://www.bilibili.com/video/av17748771/?p=12感谢贾志刚老师的视频教程。开运算闭运算形态学梯度:膨胀减去腐蚀顶帽(top hat)原图像与开操作之间的差值图像。黑帽:闭操作图像和原图像之间的差值图像。提取直线:提取步骤输入彩色图像—转...
2019-11-27 10:40:13
在opencv\sources\samples下面提供了很多的官方例程,是学习OpenCV的最好的资源。视频教程地址:https://www.bilibili.com/video/av17748771/?p=11感谢贾志刚老师的视频教程。程序:#include<iostream>
#include<opencv2/core/core.hpp>
#include<h...
2019-11-27 10:37:02
在opencv\sources\samples下面提供了很多的官方例程,是学习OpenCV的最好的资源。视频教程地址:https://www.bilibili.com/video/av17748771/?p=9感谢贾志刚老师的视频教程。图像模糊原理Smooth/Blur 是图像处理中最简单和常用的操作之一。使用该操作的原因之一就是为了给图像预处理时候减低噪声。使用Smooth/Blur操作背后是数...
2019-11-27 10:35:14
在opencv\sources\samples下面提供了很多的官方例程,是学习OpenCV的最好的资源。视频教程地址:https://www.bilibili.com/video/av17748771/?p=8感谢贾志刚老师的视频教程。绘制形状使用cv::Point与cv::ScalarPoint表示2D平面的一个点x,yp = Point(10,8);Scalar表示四个元素的向量Scalar(...
2019-11-27 10:32:22
在opencv\sources\samples下面提供了很多的官方例程,是学习OpenCV的最好的资源。理论:图像变换可以看做如下:像素变换–点操作邻域变换–区域操作其中图像亮度和对比度属于像素变换–点操作α是对比度调节参数,β是调节亮度。一些主要API:Mat new_image = Mat::zeros(image.size(),image.type()); //创建一个空白图像saturat...
2019-11-27 10:30:09
理论–线性混合操作线性混合理论:两幅图像的每个像素都进行加权相加。α的取值范围是0~1。相关API线性混合API:void cv::addWeighted(inputArray src1,double alpha,InputArray src2,double gamma,outputArray dst,int dtype = -1);代码演示#include<iostream>
#i...
2019-11-27 10:28:06
修改像素值灰度图像img.at< uchar>(y,x) = 128;RGB三通道图像img.at< Vec3b>(y,x)[0]=128;//blueimg.at< Vec3b>(y,x)[1]=128;//blueimg.at< Vec3b>(y,x)[2]=128;//blue空白图像img=Scalar(0);ROI选择Rect r(10,1...
2019-11-27 10:25:23
Mat对象Mat对象:OpenCV2.0之后引进的图像数据结构、自动分配内存、不存在内存泄漏的问题,是面向对象的数据结构,分了两个部分,头部分与数据部分。Mat对象构造函数与常用方法构造函数:Mat()Mat(int rows,int clos,int type)Mat(Size size,int type)Mat(int rows,int clos,int type,const Scalar &...
2019-11-26 20:41:41
旋转中心标定方式的说明在下面的图例中,红色为相机视野(FOV),黄色为工件,五星为Mark点。(训练的标准位置)(工件发生平移)(工件发生旋转与平移)(图4)旋转中心方法用于所有机器人与视觉配合场景方法 :计算工件实际发生的偏移量 和旋转,结合机器人的旋转中心进行二次补偿后 ,把补偿量 发送给机器人 ,然后机器人把补偿量进行抓取或放置即可。计算 某个点绕另外一旋转定角度后的坐 标,如图 :A(x,...
2019-11-26 16:49:39
获取图像像素的指针CV-Assert(myImage.depth()==CV_8U);Mat.ptr < uchar>(int i=0)获取像素矩阵的指针,索引i表示第几行,从0开始计行数。获得当前行指针const uchar * current = myImage.ptr< uchar>(row);获取当前像素点P(row,col)的像素值p(row,col)=curre...
2019-11-26 16:46:45
之前安装配置好OpenCV的环境之后,就可以进行使用了。下面是关于OpenCV的图像处理程序。#include<iostream>
#include<opencv2/core/core.hpp>
#include<highgui/highgui.hpp>
using namespace cv;
using namespace std;
int...
2019-11-26 11:11:50
关于大佬们的一些见解下面是引用知乎的一段文字: 我们从单目视觉说起。平时我们都说要做视觉识别、测量云云,然后我们就会去拍照,再对数字图像做各种处理,颜色处理、灰度化、滤波、边缘检测、霍夫变换,最后得到了希望得到的特征,是这样的对吧? 不过请注意!到了这一步,其实我们仅仅是得到了一坨坨感兴趣的像素而已!究竟要怎样才能把这些像素转化到现实世界的对象中呢?也就是说,究竟要怎样对这些仅存在于图像中的东西...
2019-11-26 08:58:40
PS:安装过程中的一些总结和教训安装文件夹里的V11对应的是VS2012版本,V14对应的是VS2015版本,所以使用VS2012的人可能无法使用opencv3后面的一些新版本的库,目前的opencv基本都支持V14,所以尽量安装VS2015.VS2012的平台默认是Win32,和你的电脑的位数无关,所以我们在VS2012上安装的时候只能选择X86的版本和Win32的平台。OpenCV是计算机视觉...
2019-11-26 08:44:54
参考代码:https://github.com/christianwengert/calib_toolbox_addon所谓手眼系统,就是人眼睛看到一个东西的时候要让手去抓取,就需要大脑知道眼睛和手的坐标关系。如果把大脑比作B,把眼睛比作A,把手比作C,如果A和B的关系知道,B和C的关系知道,那么C和A的关系就知道了,也就是手和眼的坐标关系也就知道了。相机知道的是像素坐标,机械手是空间坐标系,所以...
2019-11-25 15:25:55
勇哥的同事反映,设备的机器人在低速运动的时候,取放重复性精度可以做到+-0.2mm。但是在高速运行的时候,精度只能做到+-0.8mm。这又是什么鬼呢?我问了一圈公司的高手,他们的意见是:(1)机器人的惯性与重量要设置(2)机器人的acc加速度参数要设置,让起停速度更圓滑些(3)观察机器本身的晃动、相机的晃动、机器爪的晃动,看是否有影响(4)机器人取放之前的暂停时间是有必要的精度要求不高的时候,机器...
2019-11-23 13:25:17
这一次勇哥使用Epson机器人的标定来进行验证标定后的精度。首先按下图做九点标定。注意对于Epson机器人自己的标定指令来说,它认下面的顺序,不要乱搞。一般流程是:(1)你打印一张九点标志的纸,尽量能铺满视野范围。(2)在吸盘下装一个铅笔一样的针尖,去扎九个点的十字中心经过上面的步骤,你就能获得九组像素坐标与机器人坐标。但勇哥这台机器是背光的,这样搞不了。所以我只能先工具坐标标到标准片的Mark点...
2019-11-23 11:28:12
EPSON简单视觉编程需要设备1.EPSON机械手一台。2.工业相机一个。3.通讯设备。以固定向下相机为例1.首先准备一个类似针尖工具,装到法兰盘上。2.准备一张九个MARK点,尽可能遍布整个拍照区域。3.建立一个camera_down_camera.pts点文件。将示教好的mark点和视觉像素点分别写入P1-P9 P11-P19中。4.新建一个cal.prg程序。5.编辑cal.prg程序。Fu...
2019-11-22 16:42:40
Epson机器人同第三方相机校准方法基本思路:1. 相机通过以太网RS232同机器人通信2. 按机器人校正指令的要求获取、分离相机发送过来的信息3. 使用校准指令准备工具:1. 制作9宫图2. 制作机器人工件坐标的校准工具(类似铅笔,装在Z轴或者抓手上)一. 机器人与相机通过以太网通信(tcp/ip)1. 制作如下9宫图,该图的大小尽量占满相机的视野范围,但是不能太靠近边界,可用打印机打印,为获得...
2019-11-22 13:16:33
目的:将第三方相机的视野坐标与EPSON机器人的坐标进行校准,建立转换关系基本思路:1. 相机通过以太网或RS232同机器人通信,按机器人校正指令的要求获取、分离相机发送过来的信息2. 按照校准步骤,记录机械手校准点的机器人坐标和视觉像素坐标3. 使用校准指令,建立机械手和视觉的坐标转换关系视觉工作时,将检测到的工件的坐标发给机器人,机器人根据坐标转换关系,转换为机器人坐标后再去做抓取、装配...
2019-11-21 22:05:10
在平面直角坐标系中,怎么确定唯一的一条直线?答案是:直线上的一个定点以及它的倾斜角,二者缺一不可。坡度(图1)生活中使用用“升高量与前进量的比”表示倾斜面的“坡度”,即:坡度(比)=升高量/前进量例如,“进3升3”,“进2升2”,指的坡度比为分别为: 3/2, 2/2,前者改陡一些。斜率如图1,坡度比实际上就是tan(a),即倾斜角的正切。我们把一条直线的倾斜角a的正切值叫这条直线的斜率(slo...
2019-11-21 20:18:59
直接写出加法定理:可见,sin(a+b)并不简单等于sina+sinb。之前说过,在三角函数中我们只需要掌握6个公式(其它的做到可以推理出来),加上这两个,就齐全了。而tan的加法定理可以通过tanθ=sinθ/cosθ推导出来。tan(a+β)= sin(a+β)/cos(a+β) =(sinacosβ+cosasinβ)/(cosacosβ-sinasinβ)这个等式右边也用tan来表...
2019-11-21 18:35:43
接上一篇《Epson机器人标定后验证标定的精度(五)》接下来,验证一下取放重复性测试和全视野取放重复性测试。重复性测试我就不解释了。全视野取放重复性测试是指同样的料分别从视野的上,中,下进料(见图1),这个测试对于一键换型视觉很重要。因为人家换了个品种后,可能原来从上路进的料,变成从下路进料,这时候你的结果是否相差很大呢?(图1)下面的数据是按上面方式进料进行的取放重复性精度测试。上,中,下位置分...
2019-11-21 15:19:54
接上一篇《Epson机器人标定后验证标定的精度(四)》我们继续做实验,开始人工创建工具坐标。(图1 ct1点起始位置做为第一点)注意看箭头处的红圈,它始终都指示着像素x:1088.8 y:907.67的位置。等一会我们转180度后,就靠这个固定的红圈位置做指示。创建一个转180度后的示教点,角度88.929+180=268.929(图2)然后走到这个点位。(图3)走到z180点后,角度是正确的,...
2019-11-21 13:23:18
接上一篇《Epson机器人标定后验证标定的精度(三)》我们继续做实验。这一次我们不用现有的示教点做tool0到tool1的转换对比,而采用指定一个点(目标像素点),转为机械坐标后再运动过去,再对比特征点的位置。标定特征点信息 像素x:690.251 像素y:458.546 机械x:278.650031470315 机械y:-13.713127158548
要移动到点的位置(红点处)为:685,4...
2019-11-21 10:06:20
我们定义四个移动点(九点标定简化只用4个),3个旋转点,一个测试点(图1)标定的log信息:09:31:45 机器人连接成功
09:31:45 等待机器人前往标定点1......
09:32:00 模板位置:0, X:434.266, Y:546.689, U:-0.001
09:32:01 机器人到达标定点1,当前像素坐标为:457.752;443.519机械坐标为:3.7...
2019-11-20 21:00:16
Local坐标的使用爱普生机器人local坐标系使用,主要用于拍照MARK点坐标,根据MARK点的本地坐标,自动计算所有工作点在机器人坐标系下的坐标点,引导机器人定位、装配等工艺。Local坐标又叫本地坐标,或者工作坐标。适用于工作点较多而且点相互之间有明确的几何关系。例如PCB(一般有特定的参考点、有相对于参考点的工作点位置)或者数控加工零件。Local指令Local可以指定一个Local坐标,...