Обрезать изображение с Python - PullRequest
0 голосов
/ 26 апреля 2020

Пожалуйста, у меня есть проблема, когда я пытаюсь обрезать изображение следующим образом:

введите описание изображения здесь

Я получаю другие результаты, подскажите пожалуйста где проблема, там мой код:

import numpy as np
import cv2
from matplotlib import pyplot as plt
import matplotlib.image as mpimg




chemin = '../Images/'
nom='corridor.pgm'
img=mpimg.imread(chemin+nom)

# Sobel
kernelh = np.array([[1,0,-1],[2,0,-2],[1,0,-1]],np.float32)
kernelv = np.transpose(kernelh)
filth = cv2.filter2D(img,cv2.CV_64F,kernelh)
filtv = cv2.filter2D(img,cv2.CV_64F,kernelv)
gradient = filth+filtv*1j
module= np.abs(gradient)
rows, cols = module.shape

# FFT de la norme du gradient de Sobel
dft = cv2.dft(np.float32(module),flags = cv2.DFT_COMPLEX_OUTPUT)
dft_shift = np.fft.fftshift(dft)
magnitude_spectrum2 = np.log(cv2.magnitude(dft_shift[:,:,0],dft_shift[:,:,1]))*20.

center = [rows // 2, cols // 2]
milieu=rows // 2
x, y = np.ogrid[:rows, :cols]

mask =  (x>milieu-10) & (x<milieu+10) | (y>milieu-10) & (y<milieu+10)

masklen=512
for i in range(masklen):
    for j in range(masklen):
        if(mask[i,j]==True):
            mask[i,j]=False
        else:
            mask[i,j]=True


fshift=np.copy(dft_shift)
fshift[:,:,0] = dft_shift[:,:,0] * mask
fshift[:,:,1] = dft_shift[:,:,1] * mask
fshift_mask_mag= np.log(1+cv2.magnitude(fshift[:, :, 0], fshift[:, :, 1]))*20.

f_ishift = np.fft.ifftshift(fshift)
img_back = cv2.idft(f_ishift)
img_back = cv2.magnitude(img_back[:, :, 0], img_back[:, :, 1])




plt.figure(figsize=(15,15))
plt.subplot(2, 2, 1), plt.imshow(module, cmap='gray')
plt.title('norme du gradient de sobel'), plt.xticks([]), plt.yticks([])
plt.subplot(2, 2, 2), plt.imshow(magnitude_spectrum2, cmap='gray')
plt.title('FFT'), plt.xticks([]), plt.yticks([])
plt.subplot(2, 2, 4), plt.imshow(fshift_mask_mag, cmap='gray')
plt.title('Image reconstruite'), plt.xticks([]), plt.yticks([])
plt.subplot(2, 2, 3), plt.imshow(img_back, cmap='gray')
plt.title('bande sélectionnée'), plt.xticks([]), plt.yticks([])
plt.show()




cv2.imshow("Image",img_back)
def onmouse1(event, x, y, flags, param):
    if event == cv2.EVENT_LBUTTONDOWN:
        print("coordonnées = ",x,y)
        cv2.namedWindow('CROP', cv2.WINDOW_KEEPRATIO)
        cv2.imshow('CROP',img[y:y+20,x:x+20])

cv2.setMouseCallback("Image", onmouse1)
cv2.waitKey(0)
cv2.destroyAllWindows()

когда вы скомпилируете код, вы увидите, что результаты не совпадают на изображении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...