Processing 图像处理中的像素数据提取

Processing 图像处理中的像素数据提取,processing,pixel,capture,Processing,Pixel,Capture,使用正在处理的捕获视频,我想了解如何设置摄像机不断扫描的摄像机馈送的一小部分。在该定义的部分中,我希望相机查看亮度的变化(即亮度现在变暗)。如果亮度变化,我只希望它返回“检测到阴影”。有人能帮我开始吗?我对这种语言很陌生 假设您正在分析的摄像头数据是PImage,您可以对数据应用过滤器,将其转换为黑/白或灰度形式。PImage Filter modes:上的文档应该很有用 您可能需要进行像素分析-这里可能有一个库可以提供帮助,但您可以从过滤后的图像中获取像素阵列,在其中循环并对照基线值检查值,以

使用正在处理的捕获视频,我想了解如何设置摄像机不断扫描的摄像机馈送的一小部分。在该定义的部分中,我希望相机查看亮度的变化(即亮度现在变暗)。如果亮度变化,我只希望它返回“检测到阴影”。有人能帮我开始吗?我对这种语言很陌生

假设您正在分析的摄像头数据是PImage,您可以对数据应用过滤器,将其转换为黑/白或灰度形式。PImage Filter modes:上的文档应该很有用


您可能需要进行像素分析-这里可能有一个库可以提供帮助,但您可以从过滤后的图像中获取像素阵列,在其中循环并对照基线值检查值,以查看它们是亮还是暗。如果它们是0-255范围内的灰度,则如果数字高于基线,则可以判断它们是否较亮,如果数字较暗,则可以判断它们是否较暗。

使用PImage的方法,您可以很容易地获得相机的一小部分(或任何图像),将描述截面矩形(x、y、宽度、高度)的一组坐标传递到该方法

这在计算机视觉中也称为感兴趣区域(ROI)

检索此区域后,可以对其进行处理。 下面是一个演示如何获取ROI并对其进行处理的最小示例(在本例中,只需根据鼠标位置执行阈值:

import processing.video.*;

Capture cam;
int w = 320;
int h = 240;
int np = w*h;

int roiX = 80;
int roiY = 60;
int roiW = 160;
int roiH = 120;
PImage roi;

void setup(){
  size(w,h);
  cam = new Capture(this,w,h);
  cam.start();
}
void draw(){
  image(cam,0,0);
  if(roi != null){
    //process ROI
//    roi.filter(GRAY);
    roi.filter(THRESHOLD,(float)mouseX/width);
    //display output
    image(roi,roiX,roiY);
  }
}
void captureEvent(Capture c){
  c.read();
  roi = c.get(roiX,roiY,roiW,roiH);
}
您可以使用该函数获得像素的亮度。 这意味着您可以通过添加每个像素的亮度级别,然后将结果除以像素总数来获得ROI的平均亮度:

import processing.video.*;

Capture cam;
int w = 320;
int h = 240;
int np = w*h;

int roiX = 80;
int roiY = 60;
int roiW = 160;
int roiH = 120;
PImage roi;

void setup(){
  size(w,h);fill(127);
  cam = new Capture(this,w,h);
  cam.start();
}
void draw(){
  image(cam,0,0);
  if(roi != null){
    //process ROI
//    roi.filter(GRAY);
    roi.filter(THRESHOLD,(float)mouseX/width);
    //display output
    image(roi,roiX,roiY);
    text("ROI brightness:"+brightness(roi),10,15);
  }
}
void captureEvent(Capture c){
  c.read();
  roi = c.get(roiX,roiY,roiW,roiH);
}
float brightness(PImage in){
  float brightness = 0.0;
  int numPixels = in.pixels.length;
  for(int i = 0 ; i < numPixels; i++) brightness += brightness(in.pixels[i]); 
  return brightness/numPixels; 
}
导入处理。视频。*;
捕捉凸轮;
int w=320;
int h=240;
int np=w*h;
int-roiX=80;
int-roy=60;
int roiW=160;
int-roiH=120;
PImage-roi;
无效设置(){
尺寸(宽、高);填充(127);
cam=新捕获(此,w,h);
cam.start();
}
作废提款(){
图像(cam,0,0);
如果(roi!=null){
//处理ROI
//滤波器(灰色);
过滤器(阈值,(浮动)鼠标/宽度);
//显示输出
图像(roi、roiX、roiY);
文本(“ROI亮度:”+亮度(ROI),10,15);
}
}
无效捕获事件(捕获c){
c、 read();
roi=c.get(roiX,roiY,roiW,roiH);
}
浮动亮度(PImage in){
浮动亮度=0.0;
int numPixels=in.pixels.length;
对于(int i=0;i
如果您已将ROI设置为覆盖明亮区域,则当阴影出现时,您应看到平均亮度下降。仅在条件中使用阈值应允许对其进行操作:

import processing.video.*;

Capture cam;
int w = 320;
int h = 240;
int np = w*h;

int roiX = 80;
int roiY = 60;
int roiW = 160;
int roiH = 120;
PImage roi;

float brightness = 0.0;
float shadowThresh = 127.0;

void setup(){
  size(w,h);fill(127);
  cam = new Capture(this,w,h);
  cam.start();
}
void draw(){
  image(cam,0,0);
  if(roi != null){
    //process ROI
//    roi.filter(GRAY);
    roi.filter(THRESHOLD,(float)mouseX/width);
    brightness = brightness(roi);
    if(brightness < shadowThresh) println("shadow detected");
    //display output
    image(roi,roiX,roiY);
    text("ROI brightness:"+brightness,10,15);
  }
}
void captureEvent(Capture c){
  c.read();
  roi = c.get(roiX,roiY,roiW,roiH);
}
float brightness(PImage in){
  float brightness = 0.0;
  int numPixels = in.pixels.length;
  for(int i = 0 ; i < numPixels; i++) brightness += brightness(in.pixels[i]); 
  return brightness/numPixels; 
}
导入处理。视频。*;
捕捉凸轮;
int w=320;
int h=240;
int np=w*h;
int-roiX=80;
int-roy=60;
int roiW=160;
int-roiH=120;
PImage-roi;
浮动亮度=0.0;
浮动阴影阈值=127.0;
无效设置(){
尺寸(宽、高);填充(127);
cam=新捕获(此,w,h);
cam.start();
}
作废提款(){
图像(cam,0,0);
如果(roi!=null){
//处理ROI
//滤波器(灰色);
过滤器(阈值,(浮动)鼠标/宽度);
亮度=亮度(roi);
如果(亮度<阴影阈值)println(“检测到阴影”);
//显示输出
图像(roi、roiX、roiY);
文本(“ROI亮度:”+亮度,10,15);
}
}
无效捕获事件(捕获c){
c、 read();
roi=c.get(roiX,roiY,roiW,roiH);
}
浮动亮度(PImage in){
浮动亮度=0.0;
int numPixels=in.pixels.length;
对于(int i=0;i
希望这些示例易于阅读和理解。 请注意,这并没有尽可能快。 请务必查看处理附带的视频示例(示例>库>视频>捕获),尤其是以下示例:亮度阈值、亮度跟踪

如果你想了解更多关于这些技术的信息,你应该了解计算机视觉和OpenCV库。有一个非常好的工具,你现在可以通过草图>导入库…>添加库…轻松安装,并选择OpenCV进行处理。。它还提供了使用亮度的示例

这涵盖了像素操作方面,但进行此类开发的另一个重要方面是设置。拥有可靠的设置至关重要:它将使您的生活更轻松。我的意思是,在您的情况下:

  • 控制相机:能够控制自动白平衡/亮度/等,因为自动调整可能会偏离您的值
  • 控制场景:确保减少意外灯光干扰跟踪的风险,或是某些东西撞到正在跟踪的相机或物体上的风险

这正是我想要的。感谢您的详细解释-我期待着在我的项目中使用并修改它。