千家信息网

processing怎么实现视觉抓取小程序

发表于:2025-02-19 作者:千家信息网编辑
千家信息网最后更新 2025年02月19日,这篇文章主要介绍"processing怎么实现视觉抓取小程序",在日常操作中,相信很多人在processing怎么实现视觉抓取小程序问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对
千家信息网最后更新 2025年02月19日processing怎么实现视觉抓取小程序

这篇文章主要介绍"processing怎么实现视觉抓取小程序",在日常操作中,相信很多人在processing怎么实现视觉抓取小程序问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"processing怎么实现视觉抓取小程序"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

用processing写一个简单的视觉抓取小程序:识别红蓝绿色块并顺序抓放。

import processing.serial.*;import processing.video.*;Serial Port;Capture cam;float[][] kernel ={{0.111,0.111,0.111},                   {0.111,0.111,0.111},                   {0.111,0.111,0.111}                   };//卷积核//中间像素的灰度值等于周围像素的红色分量减去蓝绿色分量的平均值//从而使没有红色特征的像素灰度值变为零//相当于滤镜的效果,修改卷积核的参数,可以达到不一样的效果int sub_x=0,sub_y=0;//物体中心的像素坐标float pre_x=0,pre_y=0;//前一帧物体中心的像素坐标float tar_x=80,tar_y=80;//目标坐标,机械手的坐标boolean event=false;//坐标计算事件int c=0;void setup()//初始化{  String portName = Serial.list()[0];  Port = new Serial(this, portName, 115200);//连接串口  size(640,480);//屏幕大小  String[] cameras = Capture.list();  printArray(cameras);//打印可使用的相机  cam = new Capture(this, cameras[0]);  cam.start();//启动相机  frameRate(30);//帧率  Port.write("G5 B90\r\n");  Port.write("G28\r\n");  Port.write("G1 X80 Y80 Z40\r\n");  Port.write("G5 B50\r\n");//移动到初始位置  delay(6000);//延迟,避免摄像头刚打开时的波动}void draw()//循环{  if (cam.available() == true)  {    cam.read();    image(cam, 0, 0, width, height);    cam.loadPixels();    int sum_x=0,sum_y=0;//所有红色像素坐标的和    int m=1;//红色像素的个数    for(int y=1;y> 16) & 0xFF; //取颜色分量,与red()功能相似          int G = (cam.pixels[pos] >> 8) & 0xFF;          int B = cam.pixels[pos] & 0xFF;          float val=0;          switch(c)//顺序抓取红蓝绿色块          {            case 0:              val =R-1.5*B-1.5*G;              break;            case 1:              val =B-1.5*R-1.5*G;              break;            case 2:              val =G-0.5*B-1*R;              break;          }             //1.5为比例系数,改大可以让红色更突出          sum +=kernel[ky+1][kx+1]*val;//计算灰度值          }        }        if(sum>0)//新的灰度值非零        {          sum_x=sum_x+x;          sum_y=sum_y+y;//累加坐标          m=m+1;//计数        }       }     }   pre_x=sub_x;   pre_y=sub_y;//前一帧的物体中心   sub_x=sum_x/m;   sub_y=sum_y/m;//取平均,计算出物体中心像素坐标      cam.updatePixels();    fill(#FF0000);  }  line(sub_x,0,sub_x,480);  line(0,sub_y,640,sub_y);//作物体中心的两条交叉线  if(abs(sub_x-pre_x)<5&&abs(sub_y-pre_y)<5&&sub_x>5&&sub_y>5)//判断是否在移动(波动小于5个像素即为静止),是否存在物体(没有物体时默认为0,为避免波动,这里设置成5)  {    if(event==true)//如果物体存在,机械手静止,且事件被触发,则进行计算    {     tar_x=tar_x-(0.0625*sub_x-20);     tar_y=tar_y-(15-0.0625*sub_y);//把像素坐标转化成绝对坐标,根据实际比例     event=false;//关闭计算事件,即只执行一次计算     Port.write("G1 X"+tar_x+" Y"+tar_y+"\r\n");//移动到目标位置     delay(100);//延迟,减小波动    }  }  else //如果机械手在移动,触发计算事件,但不执行计算,为机械手静止时计算做准备   event=true;    /*由于机械手的通讯以及动作上有延迟,速度远赶不上摄像头对图像识别的速度,    所以仅让机械臂在静止时进行一次计算*/  if(sub_x<5&&sub_y<5)  {    if(c<3)      c=c+1;     else       c=0;  }  float mx=tar_x;  float my=tar_y+32;//手抓中心对的坐标,摄像头和手抓有32的y偏移量  if(sub_x>315&&sub_x<325&&sub_y>235&&sub_y<245)//当物体在画面中心时(+-5个像素)  {      //执行以下动作     Port.write("G1 X"+mx+'Y'+my+"Z12 F1200\r\n");     delay(1500);//充分延时     for(int i=50;i<=150;i+=5)     {       Port.write("G5 B"+i+"\r\n");       delay(50);     }          delay(500);     Port.write("G1 Z30\r\n");     delay(1000);     switch(c)//顺序摆放红蓝绿色块     {       case 0:         Port.write("G1 X150 Y120\r\n");break;       case 1:         Port.write("G1 X150 Y100\r\n");break;       case 2:         Port.write("G1 X150 Y80\r\n");break;     }     delay(1500);     Port.write("G1 Z10\r\n");     delay(500);     for(int j=150;j>=50;j-=5)     {       Port.write("G5 B"+j+"\r\n");       delay(50);     }     delay(500);     Port.write("G1 X80 Y80 Z40\r\n");     delay(1500);    if(c<3)      c=c+1;     else       c=0;   }    println(tar_x);  println(tar_y);}

到此,关于"processing怎么实现视觉抓取小程序"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

像素 坐标 物体 机械 程序 视觉 机械手 灰度 红色 事件 学习 波动 移动 静止 分量 延迟 一行 位置 动作 卷积 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 bmf2008数据库还原 传奇服务器怎么删除数据重新开区 维普和知网期刊数据库的异同 玉树州网络安全宣传 服装数据库的国外研究现状 软件开发框架指的是什么 智能云广播系统服务器 晨讯科技软件开发 远程服务器登录电脑卡住 你认为网络安全如何体现 sql创建数据库编程代码在哪 软件开发监理应该怎么做 怎么判断服务器网速慢 首款面向云计算的服务器 微信小程序数组传入数据库 web 图片服务器搭建 多久才能学会软件开发 阿里云的免费服务器会收钱吗 泰拉瑞亚的服务器ip是什么意思 网络安全与数字签名技术开题报告 网络安全钥密不对 网络安全技术及其应用前景 如何看网络安全卫士图标 什么情况会出现数据库死锁 江苏5g服务器标准机柜 中国联通网络技术中心 软件开发风险的概率 数据库出现安全问题后果 心理网络安全教育教案 boss服务器繁忙啥时候能好
0