opencv 如何将选择性搜索的分割图像可视化?

cedebl8k  于 2023-05-01  发布在  其他
关注(0)|答案(3)|浏览(145)

如何将应用于图像的选择性搜索算法的分割图像输出可视化?

import cv2

image = cv2.imread("x.jpg")

ss = cv2.ximgproc.segmentation.createSelectiveSearchSegmentation()
ss.setBaseImage(image)

ss.switchToSelectiveSearchQuality()
rects = ss.process()

也就是说,得到右边的图像

fzsnzjdm

fzsnzjdm1#

我不确定,但我认为你需要的图像可能无法获得。原因是:Open this file first containing the source code
在行726-734中,变量“images”是私有的,并且在行828处的方法switchToSelectiveSearchQuality()中,用于计算的不同图像被存储在私有变量“images”中(跟随addImage函数以查看)。
此外,存储在“images”变量中的图像被调用用于在行901处处理分割。这里调用的方法是类“GraphSegmentation”的processImage(),我无法向后跟踪。
因此,您需要的图像可能根本没有存储在任何地方,或者存储在我们无法访问的私有变量中。
编辑:在this file的第46和52行找到“GraphSegmentation”类和方法“processImage”声明。

tzdcorbm

tzdcorbm2#

我认为你可以使用以下内容。我试过了-很有效

import cv2, random

image = cv2.imread("x.jpg")

ss = cv2.ximgproc.segmentation.createSelectiveSearchSegmentation()
ss.setBaseImage(image)

ss.switchToSelectiveSearchQuality()
rects = ss.process()

for i in range(0, len(rects), 100):
    # clone the original image so we can draw on it

    output = image.copy()
    # loop over the current subset of region proposals
    for (x, y, w, h) in rects[i:i + 100]:
        # draw the region proposal bounding box on the image
        color = [random.randint(0, 255) for j in range(0, 3)]
        cv2.rectangle(output, (x, y), (x + w, y + h), color, 2)

    cv2.imshow("Output", output)
    key = cv2.waitKey(0) & 0xFF
    # if the `q` key was pressed, break from the loop
    if key == ord("q"):
        break

为什么是100?我选择了块大小为100。
原始图像:

加工后:

vatpfxk5

vatpfxk53#

你有点糊涂了。
您尝试创建的图像是由图形分割生成的:

gs = cv2.ximgproc.segmentation.createGraphSegmentation()

  # Set the sigma, k, and min_size parameters
  gs.setSigma(sigma)
  gs.setK(k)
  gs.setMinSize(min_size)

  # Process the image
  segments = gs.processImage(img)

  # Get the minimum and maximum values in the segments image
  # min, max,_, _ = cv2.minMaxLoc(segments)

  # # Get the number of segments
  # nb_segs = int(max + 1)

  # Create an output image
  output = np.zeros_like(img)
  for segment_id in np.unique(segments):
      output[segments == segment_id] = color_mapping(segment_id)

  # Save the output image
  cv2.imwrite(output_image, output)

  print("Image written to " + output_image)

图分段如这里所描述的那样工作:https://www.youtube.com/watch?v=2IVAznQwdS4&ab_channel=FirstPrinciplesofComputerVision
而这里描述的选择性搜索X1 E1 F1 X用于边界框建议- I。即,它将产生许多建议,使得一些建议包含对象
注意事项:
1.选择性搜索使用图分割作为它的第一步
1.选择性搜索用作RCNN的建议机制,以避免扫描整个img,如此处https://towardsdatascience.com/understanding-regions-with-cnn-features-r-cnn-ec69c15f8ea7所述

  1. RCNN使用建议来预测对象类,如果建议中没有对象,则建议被丢弃,因此选择性搜索需要额外的步骤来丢弃坏的建议以便有用

相关问题