微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我无法将我的 HSV 图像拆分为通道 (H、S、V)

如何解决我无法将我的 HSV 图像拆分为通道 (H、S、V)

这里是 Microsoft Visual 2010 C++ 下的代码。它说明了将 HSV 图像分成三个通道色调、饱和度和值。执行此程序时,我得到:

program.exe 停止工作

#include<opencv/highgui.h>
#include <opencv/cv.h>
#include "stdafx.h"
#include <iostream>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/core/core.hpp>
#include "string"
#include "opencv2/highgui/highgui.hpp"
#include <opencv2/features2d/features2d.hpp>
#include "opencv2/objdetect/objdetect.hpp"  
#include <vector>
using namespace cv;
using namespace std;


 int main(int argc,char** argv)
  {
        Mat img_hsv,img_rgb;
        img_rgb =cvLoadImage("er.jpg",1);
        cvtColor(img_rgb,img_hsv,CV_RGB2HSV);
        namedWindow("hsv",CV_WINDOW_norMAL);
        imshow("hsv",img_hsv);


         vector<Mat> channels;
         channels.clear();
         channels.resize(img_hsv.channels());  //resize channels 
         cv::split(img_hsv,&channels[0]);
         namedWindow("Hue",CV_WINDOW_norMAL);
         imshow("Hue",channels[0]);

         cv::split(img_hsv,&channels[1]);
         namedWindow("Saturation",CV_WINDOW_norMAL);
         imshow("Saturation",channels[1]);

         cv::split(img_hsv,&channels[2]);
         namedWindow("value",CV_WINDOW_norMAL);
         imshow("value",channels[2]);
         waitKey(0); }       

解决方法

cv::split(InputArray m,OutputArrayOfArrays mv) 输出输出数组中的所有通道,因此您只需要调用一次

cv::split(img_hsv,channels);

而不是三个调用

cv::split(img_hsv,&channels[0]);
cv::split(img_hsv,&channels[1]);
cv::split(img_hsv,&channels[2]);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。