Пожалуйста, у меня есть проблема, когда я пытаюсь обрезать изображение следующим образом:
введите описание изображения здесь
Я получаю другие результаты, подскажите пожалуйста где проблема, там мой код:
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()
когда вы скомпилируете код, вы увидите, что результаты не совпадают на изображении.