使用OpenCV对ROI边界框进行像素化处理,并叠加在原始图像上

3

让我们来直截了当地说。

我有一个私人项目,要使用OpenCV中的边界框来屏蔽或像素化图像,类似于审查图像,受到这篇论文的启发:

https://www.researchgate.net/publication/325746502_Seamless_Nudity_Censorship_an_Image-to-Image_Translation_Approach_based_on_Adversarial_Training

我已经找到了使用Keras对屏蔽区域进行分类的方法,但仍然不知道如何使用边界框来像素化分类区域,并将其覆盖到原始图像上。任何帮助都将不胜感激。

以下是我想要执行的过程示例:

enter image description here


谢谢您的回复,但是我仍然没有找到仅对从边界框分类的区域进行像素化并覆盖它的过程。 - user5648046
1个回答

5
一种简单的方法是使用Numpy切片提取ROI,然后进行像素化处理,最后将其粘贴回原始图像。我将使用在如何在Python中使用OpenCV像素化图像?中找到的像素化技术。以下是一个简单的例子:

输入图像和要提取的ROI

提取的ROI

像素化的ROI

结果

代码

import cv2

def pixelate(image):
    # Get input size
    height, width, _ = image.shape

    # Desired "pixelated" size
    h, w = (16, 16)

    # Resize image to "pixelated" size
    temp = cv2.resize(image, (w, h), interpolation=cv2.INTER_LINEAR)

    # Initialize output image
    return cv2.resize(temp, (width, height), interpolation=cv2.INTER_NEAREST)

# Load image
image = cv2.imread('1.png')

# ROI bounding box coordinates
x,y,w,h = 122,98,283,240

# Extract ROI
ROI = image[y:y+h, x:x+w]

# Pixelate ROI
pixelated_ROI = pixelate(ROI)

# Paste pixelated ROI back into original image
image[y:y+h, x:x+w] = pixelated_ROI

cv2.imshow('pixelated_ROI', pixelated_ROI)
cv2.imshow('image', image)
cv2.waitKey()

注意: ROI包围框的坐标是通过使用如何在不进行猜测和检查的情况下获取ROI边界框坐标中的脚本找到的。对于您的情况,我将假设您已经获得了cv2.boundingRect获得的x,y, w, h边界框坐标。


但我有另一个问题,根据这个问题,如果我想从我的分类器猜测的边界框(来自Keras),而不是预处理的边界框中对图像进行像素化处理,该怎么办? - user5648046
我假设你已经有了边界框坐标,如果你从Keras得到了边界框,那就意味着你有了这些坐标。 - nathancy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接