From 9f1e58398c002be21faedc2b0f79251b1ea3342a Mon Sep 17 00:00:00 2001 From: charlie <1753524606@qq.com> Date: Fri, 22 Jul 2022 09:16:17 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E7=A9=BA=E5=9F=9F=E7=9A=84?= =?UTF-8?q?=E9=94=90=E5=8C=96=E5=92=8C=E5=B9=B3=E6=BB=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- basic/views.py | 50 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/basic/views.py b/basic/views.py index 5f8793b..2316f3d 100644 --- a/basic/views.py +++ b/basic/views.py @@ -729,13 +729,52 @@ def smooth(request): d0 = para.get('d0', 20) img = filter_use_smooth(img, gauss_low_pass_filter(img, d0)) else: - return 0 + size = para['size'] + if filter == 'average': + img = cv2.blur(img, (size, size)) + elif filter == 'median': + img = cv2.medianBlur(img, size) filename = getImageName() + DEFAULT_FORMAT cv2.imwrite(PREFIX + filename, img) return HttpResponse(filename) return HttpResponse('请使用POST方法') +def process_roberts(img): + kernelx = np.array([[-1, 0], [0, 1]], dtype=int) + kernely = np.array([[0, -1], [1, 0]], dtype=int) + x = cv2.filter2D(img, cv2.CV_16S, kernelx) + y = cv2.filter2D(img, cv2.CV_16S, kernely) + # 转uint8 + absX = cv2.convertScaleAbs(x) + absY = cv2.convertScaleAbs(y) + return cv2.addWeighted(absX, 0.5, absY, 0.5, 0) + + +def process_sobel(img): + x = cv2.Sobel(img, cv2.CV_16S, 1, 0) # 对x求一阶导 + y = cv2.Sobel(img, cv2.CV_16S, 0, 1) # 对y求一阶导 + absX = cv2.convertScaleAbs(x) + absY = cv2.convertScaleAbs(y) + return cv2.addWeighted(absX, 0.5, absY, 0.5, 0) + + +def process_prewitt(img): + kernelx = np.array([[1, 1, 1], [0, 0, 0], [-1, -1, -1]], dtype=int) + kernely = np.array([[-1, 0, 1], [-1, 0, 1], [-1, 0, 1]], dtype=int) + x = cv2.filter2D(img, cv2.CV_16S, kernelx) + y = cv2.filter2D(img, cv2.CV_16S, kernely) + # 转uint8 + absX = cv2.convertScaleAbs(x) + absY = cv2.convertScaleAbs(y) + return cv2.addWeighted(absX, 0.5, absY, 0.5, 0) + + +def process_laplacian(img): + dst = cv2.Laplacian(img, cv2.CV_16S, ksize=3) + return cv2.convertScaleAbs(dst) + + @csrf_exempt def sharpen(request): if request.method == 'POST': @@ -757,7 +796,14 @@ def sharpen(request): d0 = para.get('d0', 20) img = filter_use_sharpen(img, gauss_high_pass_filter(img, d0)) else: - return 0 + if filter == 'Roberts': + img = process_roberts(img) + elif filter == 'Sobel': + img = process_sobel(img) + elif filter == 'Prewitt': + img = process_prewitt(img) + elif filter == 'Laplacian': + img = process_laplacian(img) filename = getImageName() + DEFAULT_FORMAT cv2.imwrite(PREFIX + filename, img) return HttpResponse(filename)