真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

processing怎么實(shí)現(xiàn)視覺(jué)抓取小程序

這篇文章主要介紹“processing怎么實(shí)現(xiàn)視覺(jué)抓取小程序”,在日常操作中,相信很多人在processing怎么實(shí)現(xiàn)視覺(jué)抓取小程序問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”processing怎么實(shí)現(xiàn)視覺(jué)抓取小程序”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

創(chuàng)新互聯(lián)建站-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比南譙網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式南譙網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋南譙地區(qū)。費(fèi)用合理售后完善,10余年實(shí)體公司更值得信賴。

用processing寫一個(gè)簡(jiǎn)單的視覺(jué)抓取小程序:識(shí)別紅藍(lán)綠色塊并順序抓放。

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}
                   };//卷積核
//中間像素的灰度值等于周圍像素的紅色分量減去藍(lán)綠色分量的平均值
//從而使沒(méi)有紅色特征的像素灰度值變?yōu)榱?
//相當(dāng)于濾鏡的效果,修改卷積核的參數(shù),可以達(dá)到不一樣的效果
int sub_x=0,sub_y=0;//物體中心的像素坐標(biāo)
float pre_x=0,pre_y=0;//前一幀物體中心的像素坐標(biāo)
float tar_x=80,tar_y=80;//目標(biāo)坐標(biāo),機(jī)械手的坐標(biāo)
boolean event=false;//坐標(biāo)計(jì)算事件
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);//打印可使用的相機(jī)
  cam = new Capture(this, cameras[0]);
  cam.start();//啟動(dòng)相機(jī)
  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");//移動(dòng)到初始位置
  delay(6000);//延遲,避免攝像頭剛打開時(shí)的波動(dòng)
}

void draw()//循環(huán)
{
  if (cam.available() == true)
  {
    cam.read();
    image(cam, 0, 0, width, height);
    cam.loadPixels();
    int sum_x=0,sum_y=0;//所有紅色像素坐標(biāo)的和
    int m=1;//紅色像素的個(gè)數(shù)
    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)//順序抓取紅藍(lán)綠色塊
          {
            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為比例系數(shù),改大可以讓紅色更突出
          sum +=kernel[ky+1][kx+1]*val;//計(jì)算灰度值
          }
        }
        if(sum>0)//新的灰度值非零
        {
          sum_x=sum_x+x;
          sum_y=sum_y+y;//累加坐標(biāo)
          m=m+1;//計(jì)數(shù)
        }
       }
     }
   pre_x=sub_x;
   pre_y=sub_y;//前一幀的物體中心
   sub_x=sum_x/m;
   sub_y=sum_y/m;//取平均,計(jì)算出物體中心像素坐標(biāo)
   
   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)//判斷是否在移動(dòng)(波動(dòng)小于5個(gè)像素即為靜止),是否存在物體(沒(méi)有物體時(shí)默認(rèn)為0,為避免波動(dòng),這里設(shè)置成5)
  {
    if(event==true)//如果物體存在,機(jī)械手靜止,且事件被觸發(fā),則進(jìn)行計(jì)算
    {
     tar_x=tar_x-(0.0625*sub_x-20);
     tar_y=tar_y-(15-0.0625*sub_y);//把像素坐標(biāo)轉(zhuǎn)化成絕對(duì)坐標(biāo),根據(jù)實(shí)際比例
     event=false;//關(guān)閉計(jì)算事件,即只執(zhí)行一次計(jì)算
     Port.write("G1 X"+tar_x+" Y"+tar_y+"\r\n");//移動(dòng)到目標(biāo)位置
     delay(100);//延遲,減小波動(dòng)
    }
  }
  else //如果機(jī)械手在移動(dòng),觸發(fā)計(jì)算事件,但不執(zhí)行計(jì)算,為機(jī)械手靜止時(shí)計(jì)算做準(zhǔn)備
   event=true;
    /*由于機(jī)械手的通訊以及動(dòng)作上有延遲,速度遠(yuǎn)趕不上攝像頭對(duì)圖像識(shí)別的速度,
    所以僅讓機(jī)械臂在靜止時(shí)進(jìn)行一次計(jì)算*/
  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;//手抓中心對(duì)的坐標(biāo),攝像頭和手抓有32的y偏移量
  if(sub_x>315&&sub_x<325&&sub_y>235&&sub_y<245)//當(dāng)物體在畫面中心時(shí)(+-5個(gè)像素)
  { 
     //執(zhí)行以下動(dòng)作
     Port.write("G1 X"+mx+'Y'+my+"Z12 F1200\r\n");
     delay(1500);//充分延時(shí)
     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)//順序擺放紅藍(lán)綠色塊
     {
       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);
}

到此,關(guān)于“processing怎么實(shí)現(xiàn)視覺(jué)抓取小程序”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!


網(wǎng)頁(yè)標(biāo)題:processing怎么實(shí)現(xiàn)視覺(jué)抓取小程序
網(wǎng)站鏈接:http://weahome.cn/article/geppip.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部