当前位置: 首页 > 知识库问答 >
问题:

使用带有opencv库的边缘检测程序将图像分离成组件进行处理

解鸿运
2023-03-14

我想检测边缘的图像:点击这里通过在程序中找到精明的边缘绘制的边缘:点击这里我正在使用带有处理的opencv库,这样我就可以执行边缘检测,以便将我的图像分割成不同的对象/组件。我已经能够使用精明的边缘检测来实现这一点。这给了我第二张黑色背景的图像,灰色线条表示检测到边缘的位置。然而,我需要能够将这张带有边缘的黑色图像分割成可识别的区域/对象,程序将理解为不同的区域/对象——我在想是否可以为每个由边缘限定的区域分配一种独特的颜色。然后我将能够循环通过整个图像的像素阵列,并根据其独特的颜色对每个区域进行不同的处理。

然而,我的问题是,我不知道如何进行处理,为每个以边为边界的区域指定唯一的颜色。我尝试了无数种方法来使用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;
}

共有1个答案

隆礼骞
2023-03-14

我可能回答这个问题晚了,但也许你可以尝试使用霍夫概率变换,http://docs.opencv.org/2.4/doc/tutorials/imgproc/imgtrans/hough_lines/hough_lines.html.一旦你可以对线条进行排序,你就可以用你想要的独特颜色填充它们。我想你上传的图像不应该有任何问题。让我知道它是如何工作的。

 类似资料:
  • 本文向大家介绍Python中使用OpenCV(CV2)对图像进行边缘检测,包括了Python中使用OpenCV(CV2)对图像进行边缘检测的使用技巧和注意事项,需要的朋友参考一下 使用的模块: 为此,我们将使用opencv-python模块,该模块为我们提供了处理图像的各种功能。 下载opencv-python opencv-python模块: opencv-python是一个python库,它将

  • Canny边缘检测用于检测图像中的边缘。 它接受灰度图像作为输入,并使用多级算法。可以使用类的方法在图像上执行此操作,以下是此方法的语法。 该方法接受以下参数 - image - 表示此操作的源(输入图像)的对象。 edges - 表示此操作的目标(边缘)的对象。 threshold1 - 类型为的变量表示滞后过程的第一个阈值。 threshold2 - 类型为的变量表示滞后过程的第二个阈值。 示

  • 我正试图从彩色背景图像中提取文本。我正在尝试的一种方法是边缘检测。用它我把原始图像转换成我可以处理的图像。这将消除图像中的所有颜色,只留下边缘。 我使用此代码获取边缘图像 我的问题是,在我得到这些图像后,我如何才能追踪这些图像中的字母?任何帮助都会很好。谢谢你们 这些是原始图像和边缘检测图像。 原始图像 边缘检测图像

  • 本文向大家介绍C#图像处理之边缘检测(Smoothed)的方法,包括了C#图像处理之边缘检测(Smoothed)的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#图像处理之边缘检测(Smoothed)的方法。分享给大家供大家参考。具体如下: 希望本文所述对大家的C#程序设计有所帮助。

  • 本文向大家介绍C#图像处理之边缘检测(Sobel)的方法,包括了C#图像处理之边缘检测(Sobel)的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#图像处理之边缘检测(Sobel)的方法。分享给大家供大家参考。具体如下: 希望本文所述对大家的C#程序设计有所帮助。

  • 本文向大家介绍C#图像边缘检测(Roberts)的方法,包括了C#图像边缘检测(Roberts)的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#图像边缘检测(Roberts)的方法。分享给大家供大家参考。具体如下: 希望本文所述对大家的C#程序设计有所帮助。