Pré-processamento de imagem OpenCV python (2): alterar o tamanho da imagem e extrair a região de interesse

1. Altere o tamanho da imagem

1. Obtenha a largura, altura e número de canais da imagem

O método específico é o seguinte:

print(img.shape[0])  # 图片高height
print(img.shape[1])  # 图片宽width
print(img.shape[2])  # 图片通道数

2. A função de redimensionamento

opencv-python fornece a função de redimensionamento para alterar o tamanho geral da imagem, a função é a seguinte.

cv2.resize(图像 ,(w, h), fx=倍数, fy=倍数)	#改变图像shape

Entre eles, (w, h) pode alterar diretamente o tamanho da imagem, w refere-se à largura da imagem e h refere-se à altura da imagem .
fx e fy são multiplicados para aumentar ou diminuir a largura ou altura da imagem.

O método de uso específico é o seguinte:

cv2.resize(img, (w, h))		# 指定宽高改变图像大小
cv2.resize(img, (0, 0), fx=num1, fy=num2)		# 指定倍数改变图像大小
# num1、num2为倍数

Combinado com a largura e altura da imagem obtida, o tamanho da imagem também pode ser alterado em múltiplos de w e h, conforme mostrado abaixo:

cv2.resize(img, (int(img.shape[1]*num1), int(img.shape[0]*num2)))		# 指定宽高改变图像大小
# num1、num2为倍数

Deve-se observar que a largura e a altura da imagem devem ser um número inteiro, então adicione int() para alterar o valor para um número inteiro para garantir que o tipo esteja correto, caso contrário ocorrerá o seguinte erro.
insira a descrição da imagem aqui

Can't parse 'dsize'. Sequence item with index 0 has a wrong type

3. Caso

A resolução da imagem original é 712*709, e a imagem alterada é 300*300, e a largura e a altura de cada imagem são 1/2 da imagem original. O procedimento específico é o seguinte:

import cv2  # 导入opencv库

if __name__ == '__main__':
    while True:
        img = cv2.imread('img/1.jpg', 1)    # 获取路径img/0.jpg的图像,图像类型为RGB图像

        # 此处为改变图像大小
        img_wh = cv2.resize(img, (300, 300))  # 通过w、h改变图像大小
        img_fxy = cv2.resize(img, (0, 0), fx=0.5, fy=0.5)  # 通过fx、fy改变图像大小

        cv2.imshow("img", img)     # 显示原图
        cv2.imshow("img_wh", img_wh)  # 显示w、h改变后的图
        cv2.imshow("img_fxy", img_fxy)  # 显示fx、fy改变后的图
        cv2.waitKey(1)  # 等待时间

O efeito é o seguinte:
insira a descrição da imagem aqui

2. Área de interesse do ROI

1. Definição da região de interesse

Quando obtemos um quadro de imagem de um ambiente complexo através de uma câmera ou outro meio, a imagem contém muitas informações nas quais não estamos interessados. Se processarmos a imagem inteira, muitas vezes será muito tedioso. Se não tivermos experiência suficiente, iremos É fácil codificar. Portanto, se a cena e os requisitos permitirem, você pode tentar enquadrar a região de interesse antes do processamento da imagem, o que pode efetivamente reduzir a complexidade do programa e reduzir efetivamente o tempo para o processamento subsequente da imagem. Ao mesmo tempo, também pode ser aplicado no processo de processamento de imagens e utilizado conforme necessário.

2. Extração de ROI em opencv-python

O método para extrair o ROI é o seguinte:

img = cv2.imread()[y1:y2,x1:x2]	#ROI区域

As coordenadas do canto superior esquerdo são (x1, y1) e as coordenadas do canto inferior direito são (x2, y2)

3. Caso

Antes de extrair o ROI, o tamanho da imagem é definido como 600 * 600 e, em seguida, a região de interesse é extraída: as coordenadas do canto superior esquerdo são (200, 0) e as coordenadas do canto inferior direito são (600, 400), ou seja, de 0 a 400 no eixo y, e no eixo x De 200 a 600 . O procedimento específico é o seguinte:

import cv2  # 导入opencv库

if __name__ == '__main__':
    while True:
        img = cv2.imread('img/1.jpg', 1)    # 获取路径img/0.jpg的图像,图像类型为RGB图像

        img = cv2.resize(img, (600, 600))  # 通过w、h改变图像大小

        img_ROI = img[0:400, 200:600]   # 提取感兴趣区域

        cv2.imshow("img", img)  # 显示w、h改变后的图
        cv2.imshow("ROI", img_ROI)  # 显示感兴趣区域
        cv2.waitKey(1)  # 等待时间

O efeito é o seguinte:
insira a descrição da imagem aqui

3. Aplicação combinada: um dos métodos de aprimoramento de dados de aprendizagem profunda

Conforme mostrado no programa acima, com base nele, a imagem pode ser convertida para o tamanho original redimensionando novamente. O programa específico é o seguinte, desta vez a imagem é alterada para 300 * 300 (o tamanho de entrada da imagem do modelo SSD é geralmente 300 * 300):

import cv2  # 导入opencv库

if __name__ == '__main__':
    while True:
        img = cv2.imread('img/1.jpg', 1)    # 获取路径img/0.jpg的图像,图像类型为RGB图像

        img = cv2.resize(img, (300, 300))  # 通过w、h改变图像大小

        img_ROI = img[0:200, 100:300]   # 提取感兴趣区域

        img_2 = cv2.resize(img_ROI, (img.shape[1], img.shape[0]))     # 改变为原本图像大小
        cv2.imshow("img", img)  # 显示w、h改变后的图
        cv2.imshow("ROI", img_ROI)  # 显示感兴趣区域
        cv2.imshow("img_2", img_2)  # 显示最终图像
        cv2.waitKey(1)  # 等待时间

O efeito é o seguinte: por meio das operações acima, o volume de dados do conjunto de dados de aprendizado profundo pode ser aumentado e o corte da imagem (geralmente corte aleatório )
insira a descrição da imagem aqui
é realizado durante o treinamento para evitar overfitting no treinamento .

Sou estudante e estou estudando atualmente. Este artigo pode ser considerado como minhas notas de estudo. Corrija-me se eu estiver errado.

Acho que você gosta

Origin blog.csdn.net/xztli/article/details/126149578
Recomendado
Clasificación