image I want to detect edges from: click here edges drawn by finding canny edges in program: click here 我正在使用opencv库进行处理,以便我可以执行边缘检测,以便将我的图像分割成不同的对象/组件。我已经能够使用canny边缘检测实现这一点。这给了我第二个黑色背景图像,灰色线条表示检测到边缘的位置。然而,我需要能够将这个黑色图像与边缘分离成可识别的区域/对象,程序将理解为不同 - 我在想是否可以为边缘限定的每个区域分配唯一的颜色。然后,我将能够遍历整个图像的像素阵列,并根据其独特的颜色区别对待每个区域。
然而,我的问题是我不知道如何处理为每个由边缘限定的区域分配唯一的颜色。我已经尝试过无数种方式使用for循环,以便它可以找到并分配不同的区域,但无论我尝试什么都没有用。想知道是否有人有任何解决方案?这是代码:
import gab.opencv.*;
import processing.video.*;
OpenCV opencv;
Capture src;
PImage canny, ref, comb, comb2, tiles;
color [] combColour = new color [0];
int c = 0;
int threshold = 20;
int a = 100;
int b = 100;
int x = 0;
int y = 0;
Boolean dir = true;
int ydirection = 1;
int xdirection = 1;
void setup(){
src = new Capture(this, 640, 480);
size(640, 480, P2D);
src.start();
ref = createImage(width/2, height/2, HSB);
tiles = loadImage("tiles2.png");
opencv = new OpenCV(this, tiles);
opencv.findCannyEdges(20, 75);
canny = opencv.getSnapshot();
}
void draw(){
updatePixels();
src.read();
loadPixels();
pushMatrix();
image(tiles, 0, 0, width/2, height/2);
opencv.loadImage(tiles);
opencv.findCannyEdges(20, 75);
canny = opencv.getSnapshot();
image(canny, 0, height/2, width/2, height/2);
if (c == 5){
comb = get(0, height/2, width/2, height/2);
comb2 = get(0, height/2, width/2, height/2);
}
if ( c >= 5){
comb.loadPixels();
int loc = x + y*comb.width;
color currentColor = comb.pixels[loc];
if (brightness(currentColor) < 10){
comb.pixels[loc] = color(hue(a), saturation(b), brightness(currentColor));
}
else if (brightness(currentColor) > 150){
comb.pixels[loc] = currentColor;
if ( a >= 235){
a = 0;
}
else{
a += 20;
}
if ( b >= 235){
b = 0;
}
else {
b += 20;
}
}
if (y >= comb.height -1){
x += 1;
y = 0;
println("one" + x);
}
else{
y += 1;
println("two" + y);
}
println("a " + a);
comb.updatePixels();
image(comb, width/2, height/2);
image(comb2, width/2, 0);
}
popMatrix();
updatePixels();
c += 1;
}
答案 0 :(得分:0)
我可能迟到了回答这个问题,但可能你可以尝试使用Hough Probabilistic Transform,http://docs.opencv.org/2.4/doc/tutorials/imgproc/imgtrans/hough_lines/hough_lines.html。一旦你可以划线,你可以在(x,y)坐标中对它们进行排序,并用你想要的,独特的颜色填充区域。你上传的图片不应该与我想的任何问题有关。 让我知道它是如何工作的。