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):