From 0ba31ff01ffaeefc69c436e66b09fbb7ffb90907 Mon Sep 17 00:00:00 2001 From: charlie <1753524606@qq.com> Date: Tue, 19 Jul 2022 17:11:53 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90hsv=E8=89=B2=E5=BD=A9?= =?UTF-8?q?=E7=A9=BA=E9=97=B4=E4=BB=A5=E5=8F=8A=E9=92=88=E5=AF=B9rgb?= =?UTF-8?q?=E3=80=81hsv=E7=9A=84=E6=BB=A4=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- basic/urls.py | 3 ++- basic/views.py | 43 ++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 42 insertions(+), 4 deletions(-) diff --git a/basic/urls.py b/basic/urls.py index 4910b27..2601e7d 100644 --- a/basic/urls.py +++ b/basic/urls.py @@ -6,5 +6,6 @@ urlpatterns = [ path('upload/', views.upload), path('', views.r), path('draw', views.basic_drawing), - path('rgb//', views.rgb_color_space) + path('rgb/', views.rgb_color_space), + path('hsv/', views.hsv_color_space), ] diff --git a/basic/views.py b/basic/views.py index 003fb08..6a4599f 100644 --- a/basic/views.py +++ b/basic/views.py @@ -125,10 +125,21 @@ def basic_drawing(request): return HttpResponse('请使用POST方法') +def process_filter_rgb(para, data): + limit = para.get('limit', 100) + c_range = para.get('range', [90, 230]) + if np.max(data) > limit: + data = data * (255 / np.max(data)) + tmp = np.zeros_like(data) + tmp[((data > c_range[0]) & (data <= c_range[1]))] = 255 + return tmp + + @csrf_exempt def rgb_color_space(request, color): - if request.method == 'GET': - image_name = request.GET.get('img') + if request.method == 'POST': + para = json.loads(request.body) + image_name = para['img'] img = cv2.imread(PREFIX + image_name) data = None if color == 'r': @@ -137,10 +148,36 @@ def rgb_color_space(request, color): data = img[:, :, 1] elif color == 'b': data = img[:, :, 0] + if para.get('filter', False): + data = process_filter_rgb(para, data) + filename = color + '-' + image_name + cv2.imwrite(PREFIX + filename, data) + return HttpResponse(filename) + return HttpResponse('请使用POST方法') + + +@csrf_exempt +def hsv_color_space(request, color): + if request.method == 'POST': + para = json.loads(request.body) + image_name = para['img'] + img = cv2.imread(PREFIX + image_name) + hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) + data = None + if color == 'h': + data = hsv[:, :, 0] + elif color == 's': + data = hsv[:, :, 1] + elif color == 'v': + data = hsv[:, :, 2] + elif color == 'filter': + upper_bound = para.get('ub', [0, 0, 0]) + lower_bound = para.get('lb', [200, 40, 100]) + data = cv2.inRange(hsv, np.array(upper_bound), np.array(lower_bound)) filename = color + '-' + image_name cv2.imwrite(PREFIX + filename, data) return HttpResponse(filename) - return HttpResponse('请使用GET方法') + return HttpResponse('请使用POST方法') def r(request):