我正在寻找从RGB到HSV的色彩空间转换器,特别是对于两个色彩空间的0到255范围.
我有3个辣椒这个图像:

我需要将这张图片转换为HSV格式,然后将每个辣椒分成自己的图像.
到目前为止,我似乎能够很好地将红辣椒与其他红辣椒分开.但是,我似乎无法弄清楚如何分开其他辣椒.
这是我的代码:
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/objdetect/objdetect.hpp>
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <cmath>
#include <string>
#include <vector>
int main(int argc, char *argv[]){
cv::Mat im_in;
cv::Mat hsv_in;
cv::Mat bgr_in;
cv::Mat orig_in;
cv::Mat im_o1;
cv::Mat im_o2;
cv::Mat im_o3;
// Read image
if (argc<2){
im_in = cv::imread("colorpeppers.jpg");
}
if (argc==2){
im_in=cv::imread((argv[1]));
}
if (argc>2){
std::cout<<"Error! Too many arguments!"<<std::endl;
}
if (im_in.empty()){
std::cout << "error detected. something went wrong with opening the image. …Run Code Online (Sandbox Code Playgroud) 我有一个640 x 480 CV_8UC3 Mat image并且想要执行 k 均值分割。所以我需要将它转换为CV_32F(这里没问题),重塑它,然后运行 k-means。
问题是reshape()什么都不做:
cv::Mat colorMat;
image.convertTo (colorMat, CV_32FC3);
std::cout << colorMat.size () << "; ch: " << colorMat.channels () << std::endl; // [640 x 480]; ch: 3
colorMat.reshape (1, colorMat.rows * colorMat.cols); // Here I expect it to become [307200 x 3], 1 channel - each column representing a color component
std::cout << colorMat.size () << "; ch: " << colorMat.channels () << std::endl; // [640 x …Run Code Online (Sandbox Code Playgroud)