在js中对彩色图像使用直方图均衡

Using histogram equalization in color image in js

我想在彩色图像输出中使用 OpenCV 直方图均衡,但我没有找到执行此操作的方法。 这是教程: https://docs.opencv.org/3.4/d2/d74/tutorial_js_histogram_equalization.html

let src = cv.imread('canvasInput');
let dst = new cv.Mat();
cv.cvtColor(src, src, cv.COLOR_RGBA2GRAY, 0);
cv.equalizeHist(src, dst);
cv.imshow('canvasOutput', src);
cv.imshow('canvasOutput', dst);
src.delete(); dst.delete();

此代码将图像转换为灰色。

可以对彩色图像使用直方图均衡化:

  • cvtConvert() 到 hsv(非灰度)
  • split() 将 hsv 图像分成单独的 h、s、v 平面
  • 在 V(灰度强度)通道上应用 equalizeHist()
  • merge() hsv 飞机返回
  • cvtConvert() 返回 RGBA

这是我在@berak 帮助下找到的答案。 这将均衡彩色图像的直方图

    let imgElement = document.getElementById("ImgViewImage"); // img element with ImgViewImage id
    let src = cv.imread(imgElement);
    let dst = new cv.Mat();
    let hsvPlanes = new cv.MatVector();
    let mergedPlanes = new cv.MatVector();
    cv.cvtColor(src, src, cv.COLOR_RGB2HSV, 0);
    cv.split(src, hsvPlanes);
    let H = hsvPlanes.get(0);
    let S = hsvPlanes.get(1);
    let V = hsvPlanes.get(2);
    cv.equalizeHist(V, V);
    mergedPlanes.push_back(H);
    mergedPlanes.push_back(S);
    mergedPlanes.push_back(V);
    cv.merge(mergedPlanes, src);
    cv.cvtColor(src, dst, cv.COLOR_HSV2RGB, 0);
    cv.imshow("canvasOutput", dst); // canavas element with canvasOutput id
    src.delete();
    dst.delete();
    hsvPlanes.delete();
    mergedPlanes.delete();