我想將 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();
此代碼將影像轉換為灰色。
uj5u.com熱心網友回復:
您可以對彩色影像使用直方圖均衡:
- cvtConvert() 轉 hsv(非灰度)
- split() 將 hsv 影像分成單獨的 h,s,v 平面
- 在 V(灰度強度)通道上應用 equalizeHist()
- merge() hsv 平面回傳
- cvtConvert() 回傳 RGBA
uj5u.com熱心網友回復:
這是我在@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();
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/442192.html
標籤:javascript opencv 图像处理 直方图 RGB
上一篇:輪廓元組的長度必須為2或3,否則OpenCV會再次更改其cv2.findContours回傳簽名-在特定區域中查找輪廓
