完成hsv色彩空间以及针对rgb、hsv的滤值

master
charlie 4 years ago
parent 6cebbc019c
commit 0ba31ff01f

@ -6,5 +6,6 @@ urlpatterns = [
path('upload/', views.upload),
path('', views.r),
path('draw', views.basic_drawing),
path('rgb/<str:color>/', views.rgb_color_space)
path('rgb/<str:color>', views.rgb_color_space),
path('hsv/<str:color>', views.hsv_color_space),
]

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

Loading…
Cancel
Save