2014-07-13 36 views
-3

如何使用OpenCV在Python中編寫以下MATLAB代碼片段?我對最後一行代碼有問題,我不知道如何實現這個'單一'功能。你可以幫我嗎 ?謝謝。如何在Python中使用OpenCV編寫此代碼?

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

我的代碼看起來如下,我試過到目前爲止:

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

我更新的代碼 – drgs

+0

你很可能使用'img.astype(np.float32)'到numpy的數組轉換爲單精度浮點型 – Amro

+0

它不工作,很遺憾。整個圖像變白,只有一些黑點。 – drgs

回答

1

這裏是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

這裏是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

它的工作,非常感謝你!我的錯誤是我忘了把這個減號放在內核上。 – drgs