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.
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:
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:
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 )
é 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.