问题描述
这里是 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]);