use*_*ape 8 computer-science opencv image-processing hsv computer-vision
我是opencv的初学者.我正在使用opencv v2.1.我已将RGB图像转换为HSV图像.现在我想分别获得单通道Hue,Value和Saturation.我该怎么办?我在这里看到过类似的问题,但没有人回答这个问题.请帮助.
dig*_*ggy 13
您可以访问与RGB图像相同的方式,其中第一个通道用于H,第二个通道用于S,第三个通道用于V.
如果您使用的是OpenCV 2.1,那么您必须使用IplImage,对吗?就像你的HSV图像一样
IplImage *src.
IplImage* h = cvCreateImage( cvGetSize(src), IPL_DEPTH_8U, 1 );
IplImage* s = cvCreateImage( cvGetSize(src), IPL_DEPTH_8U, 1 );
IplImage* v = cvCreateImage( cvGetSize(src), IPL_DEPTH_8U, 1 );
// Split image onto the color planes
cvSplit( src, h, s, v, NULL );
Run Code Online (Sandbox Code Playgroud)
cvSplit函数将多通道阵列分成几个单通道.如果我错了,请纠正我.我建议使用OpenCV 2.4.它的结构类似于cvMat,它非常容易处理,就像2D数组一样.
编辑:如果您使用的是Mat,那么您可以轻松地将频道分开.让我们说你的hsv垫是Mat img_hsv.然后 :
vector<Mat> hsv_planes;
split( img_hsv, hsv_planes );
hsv_planes[0] // H channel
hsv_planes[1] // S channel
hsv_planes[2] // V channel
Run Code Online (Sandbox Code Playgroud)
看看你是否可以解决这个问题.
Python的解决方案:
import cv2
from matplotlib import pyplot as plt
# Read image in BGR
img_path = "test.jpg"
img = cv2.imread(img_path)
# Convert BGR to HSV and parse HSV
hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
h, s, v = hsv_img[:, :, 0], hsv_img[:, :, 1], hsv_img[:, :, 2]
# Plot result images
plt.imshow("Original", cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.imshow("HSV", hsv_img)
plt.imshow("H", h)
plt.imshow("S", s)
plt.imshow("V", v)
plt.show()
Run Code Online (Sandbox Code Playgroud)
这是一个垫子:
cv::Mat hsv_image = ...;
std::vector<cv::Mat> hsv_channels;
cv::split(hsv_image, hsv_channels);
cv::Mat h_image = hsv_channels[0];
cv::Mat s_image = hsv_channels[1];
cv::Mat v_image = hsv_channels[2];
Run Code Online (Sandbox Code Playgroud)