Image 显示一个图像并在出现问题时用另一个图像替换它

Image 显示一个图像并在出现问题时用另一个图像替换它,image,if-statement,replace,processing,Image,If Statement,Replace,Processing,我使用颜色跟踪代码进行处理 我想要的(示例): 如果检测到红色,则显示图像1 如果检测到绿色,则显示图像2 如果检测到蓝色,则显示图像3 问题是,如果检测到最后一种颜色并显示最后一幅图像,我现在跟踪第一种颜色,第一幅图像不在前面(我看不见) 整个代码: 导入处理。视频。*; //导入超媒体.net。*; 皮马杰; PImage-img2; PImage img3; 捕获视频; 最终int公差=20; 浮点XRc=0;//第一个目标中心的XY坐标 浮动YRc=0; 浮动XRh=0;//第二个目

我使用颜色跟踪代码进行处理

我想要的(示例):

  • 如果检测到红色,则显示图像1
  • 如果检测到绿色,则显示图像2
  • 如果检测到蓝色,则显示图像3
问题是,如果检测到最后一种颜色并显示最后一幅图像,我现在跟踪第一种颜色,第一幅图像不在前面(我看不见)

整个代码:

导入处理。视频。*;
//导入超媒体.net。*;
皮马杰;
PImage-img2;
PImage img3;
捕获视频;
最终int公差=20;
浮点XRc=0;//第一个目标中心的XY坐标
浮动YRc=0;
浮动XRh=0;//第二个目标中心的XY坐标
浮动YRh=0;
浮点XRc2=0;//第三个目标中心的XY坐标
浮动YRc2=0;
浮动XRh2=0;//第四个目标中心的XY坐标
浮动YRh2=0;
int ii=0//鼠标点击计数器
颜色轨迹颜色//第一种颜色是机器人的中心
彩色trackColor2//第二种颜色是机器人的头部
彩色trackColor3//第一种颜色是机器人2的中心
彩色trackColor4//第一种颜色是机器人2的中心
无效设置(){
img=loadImage(“img_4700.JPG”);
img2=loadImage(“2.JPG”);
img3=loadImage(“3.JPG”);
尺寸(800800);
视频=新捕获(这是640480);
video.start();
trackColor=color(94164126);
trackColor2=颜色(60110194);
trackColor3=颜色(197,76,64);
trackColor4=颜色(255,0,0);
光滑的();
}
作废提款(){
背景(0);
if(video.available()){
video.read();
}
loadPixels();
图像(视频,0,0);
浮动r2=红色(轨迹颜色);
浮动g2=绿色(轨迹颜色);
浮动b2=蓝色(轨迹颜色);
浮动r3=红色(trackColor2);
浮动g3=绿色(trackColor2);
浮动b3=蓝色(trackColor2);
浮动r4=红色(trackColor3);
浮动g4=绿色(trackColor3);
浮动b4=蓝色(trackColor3);
浮动r5=红色(trackColor4);
浮动g5=绿色(trackColor4);
浮动b5=蓝色(trackColor4);
int somme_x=0,somme_y=0;//计算中心
内部计算机=0;
int somme_x2=0,somme_y2=0;//计算中心
int computer2=0;
int somme_x3=0,somme_y3=0;//计算中心
int compteur3=0;
int somme_x4=0,somme_y4=0;//计算中心
int compteur4=0;
用于(int x=0;x0){
XRc=somme_x/计算机;
YRc=somme_y/承包商;
}
if(距离(r1、g1、b1、r3、g3、b3)<公差){
somme_x2+=x;
somme_y2+=y;
computer2++;
}
如果(computer2>0){
XRh=somme_x2/编译器2;
YRh=somme_y2/编译器2;
}
if(距离(r1、g1、b1、r4、g4、b4)<公差){
somme_x3+=x;
somme_y3+=y;
compteur3++;
}
如果(compteur3>0){
XRc2=somme_x3/编译器3;
YRc2=somme_y3/编译器3;
}
if(距离(r1、g1、b1、r5、g5、b5)<公差){
somme_x4+=x;
somme_y4+=y;
计算机4++;
}
如果(computer4>0){
XRh2=somme_x4/编译器4;
YRh2=somme_y4/编译器4;
}
}
}
//跟踪颜色并显示图像
布尔c1=假;
布尔c2=假;
布尔值c3=假;
如果(XRc!=0 | | YRc!=0){//检测到绿色
c1=真;
c2=假;
c3=假;
} 
如果(XRh!=0 | | YRh!=0){//检测到蓝色
c2=真;
c1=假;
c3=假;
}
如果(XRc2!=0 | | YRc2!=0){//检测到红色
c3=真;
c1=假;
c2=假;
}
如果(c1==真){
图像(img,0,0);//显示图像1
}否则如果(c2==真){
图像(img2,0,0);//显示图像2
}else if(c3==true){
图像(img3,0,0);//显示图像3
}
}
重要的片段是:

//检测颜色并显示图像
布尔c1=假;
布尔c2=假;
布尔值c3=假;
如果(XRc!=0 | | YRc!=0){//检测到绿色
c1=真;
c2=假;
c3=假;
} 
如果(XRh!=0 | | YRh!=0){//检测到蓝色
c2=真;
c1=假;
c3=假;
}
如果(XRc2!=0 | | YRc2!=0){//检测到红色
c3=真;
c1=假;
c2=假;
}
如果(c1==真){
图像(img,0,0);//显示图像1
}否则如果(c2==真){
图像(img2,0,0);//显示图像2
}else if(c3==true){
图像(img3,0,0);//显示图像3
}
截图:

跟踪第一个对象并显示图像

跟踪第二个对象并显示图像

跟踪第三个对象并显示图像

我的问题: (应跟踪第一个对象,并显示第一个图像)
哼哼。。。在不运行代码的情况下,我敢打赌问题在于您依赖于坐标(
XRc
及其同级)为零来选择要使用的图像。它们都初始化为0,因此第一次运行正常,但是。。。你从来没有将它们重置为零,是吗?因此,在检测到3种颜色后,它们都被改变一次,你的测试就没用了。也许您可以在检测到颜色时将它们全部重置为零

也许你根本不需要布尔值

你觉得这个怎么样

//全局
PImage imgs=新PImage[3];
int imageToDispaly=0;
//所有的东西。。。
如果(XRc!=0 | | YRc!=0){//检测到绿色
//不确定这是否可行,但想法是这样的。
XRh=Y