2014-07-13 2 views
-3

Comment écrire le morceau de code MATLAB suivant dans Python en utilisant OpenCV? J'ai des problèmes avec la dernière ligne de code, je ne sais pas comment implémenter cette fonction 'single'. Pouvez-vous m'aider ? Merci.Comment écrire ceci dans OpenCV avec Python?

img = imread(''); 
grayImage = rgb2gray(img); 
kernel1 = -1 * ones(3)/9; 
kernel1(2,2) = 8/9 
filteredImage = imfilter(single(grayImage), kernel1); 

Mon code ressemble comme suivant, que j'ai essayé jusqu'à présent:

import cv2 
import numpy as np 

img = cv2.imread('', 0); 

kernel1 = np.ones((3,3), np.float32)/9 
kernel1[1][1] = 0.8888889 

filteredImage = cv2.filter2D(img, -1, kernel1) 
+0

Je mis à jour le code – drgs

+0

vous pouvez probablement utiliser 'img.astype (np.float32)' pour convertir le tableau numpy type à virgule flottante simple précision – Amro

+0

Il ne fonctionne pas, malheureusement. L'image entière devient blanche avec seulement quelques points noirs dessus. – drgs

Répondre

1

Voici la version Matlab:

img = rgb2gray(imread('peppers.png')); 

kernel = -ones(3)/9; 
kernel(2,2) = 8/9; 

out = imfilter(single(img), kernel1); 
imshow(out, []) % <-- note automatic image rescaling 

matlab

Voici la version python:

import numpy as np 
import cv2 

img = cv2.imread("peppers.png", 0) 

kernel = np.ones((3,3), np.float32)/-9.0 
kernel[1][1] = 8.0/9.0 

out = cv2.filter2D(img.astype(np.float32), -1, kernel) 
out = (out - out.min())/(out.max() - out.min()) 

cv2.imshow("image", out) 
cv2.waitKey(0) 

python_opencv

+0

Cela a fonctionné, merci beaucoup! Mon erreur a été que j'ai oublié de mettre ce signe moins au noyau. – drgs