You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对HSV颜色映射进行裁剪与重映射以复刻napari效果?

实现HSV颜色映射范围的裁剪与重映射(复刻napari效果)

我需要对HSV颜色映射的特定范围进行裁剪与重映射,尝试用Python代码复刻napari图像查看器的图像处理效果,但始终无法实现HSV范围的重新缩放。

输入图像

Garfield input

第一段尝试代码

import os, glob
import cv2
import matplotlib.pyplot as plt
from skimage import io, exposure
from natsort import natsorted
import numpy as np
image1 = cv2.imread('Garfield.tiff')
image2 = exposure.rescale_intensity (image1, in_range=(100, 230))
image3 = np.zeros(image2.shape, image2.dtype)
#alpha = 1.5 # Simple contrast control
#beta = 0    # Simple brightness control
for y in range(image2.shape[0]):
    for x in range(image2.shape[1]):
        for c in range(image2.shape[2]):
            image3[y,x,c] = np.clip(2 * image2[y,x,c], 0, 255)
image4 = cv2.applyColorMap(image3, cv2.COLORMAP_HSV)
cv2.imwrite("New_Garfield.tiff", image4)

第一段代码输出图像

New Garfield

napari目标效果

napari效果

napari的对比度限制规则:

  • 对比度限制为二元组,第二个值大于第一个
  • 较小的限制值对应颜色映射中0定义的颜色,所有小于该值的图像数据都会被映射到该颜色
  • 较大的限制值对应颜色映射中1定义的颜色,所有大于该值的图像数据都会被映射到该颜色

第二段尝试代码

import cv2
import numpy as np

image1 = cv2.imread('Garfield.png')
for y in range(image1.shape[0]):
    for x in range(image1.shape[1]):
        for c in range(image1.shape[2]):
            image1[y,x,c] = np.clip(2*image1[y,x,c], 0, 255)

OldMax = 255
OldMin = 75
NewMax = 180
NewMin = 0
OldRange = (OldMax - OldMin)  
NewRange = (NewMax - NewMin)

for x in range (image1.shape[0]):
    for y in range(image1.shape[1]):
        for c in range(image1.shape[2]): 
            b = image1[:,:,0]
            g = image1[:,:,1]
            r = image1[:,:,2]
            h = (((g - OldMin) * NewRange) / OldRange) + NewMin
            c = (h, 255, 255)

image2 = cv2.cvtColor(image1, cv2.COLOR_HSV2BGR)

cv2.imwrite("Adjusted_Garfield.tiff", image2)

第二段代码输出图像

Adjusted_Garfield

希望能得到帮助,实现HSV颜色映射的范围重新缩放。


内容的提问来源于stack exchange,提问作者Stone Gold

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 20:22:51