Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从c+;移植RGB2CMYK方法时出现问题+;到爪哇 我尝试将一种方法从C++转换成java。方法如下: void rgb2cmyk(cv::Mat& src, std::vector<cv::Mat>& cmyk) { CV_Assert(src.type() == CV_8UC3); cmyk.clear(); for (int i = 0; i < 4; ++i) cmyk.push_back(cv::Mat(src.size(), CV_32F)); for (int i = 0; i < src.rows; ++i) { for (int j = 0; j < src.cols; ++j) { cv::Vec3b p = src.at<cv::Vec3b>(i,j); float r = p[2] / 255.; float g = p[1] / 255.; float b = p[0] / 255.; float k = (1 - std::max(std::max(r,g),b)); cmyk[0].at<float>(i,j) = (1 - r - k) / (1 - k); cmyk[1].at<float>(i,j) = (1 - g - k) / (1 - k); cmyk[2].at<float>(i,j) = (1 - b - k) / (1 - k); cmyk[3].at<float>(i,j) = k; } } }_Java_C++_Opencv - Fatal编程技术网

从c+;移植RGB2CMYK方法时出现问题+;到爪哇 我尝试将一种方法从C++转换成java。方法如下: void rgb2cmyk(cv::Mat& src, std::vector<cv::Mat>& cmyk) { CV_Assert(src.type() == CV_8UC3); cmyk.clear(); for (int i = 0; i < 4; ++i) cmyk.push_back(cv::Mat(src.size(), CV_32F)); for (int i = 0; i < src.rows; ++i) { for (int j = 0; j < src.cols; ++j) { cv::Vec3b p = src.at<cv::Vec3b>(i,j); float r = p[2] / 255.; float g = p[1] / 255.; float b = p[0] / 255.; float k = (1 - std::max(std::max(r,g),b)); cmyk[0].at<float>(i,j) = (1 - r - k) / (1 - k); cmyk[1].at<float>(i,j) = (1 - g - k) / (1 - k); cmyk[2].at<float>(i,j) = (1 - b - k) / (1 - k); cmyk[3].at<float>(i,j) = k; } } }

从c+;移植RGB2CMYK方法时出现问题+;到爪哇 我尝试将一种方法从C++转换成java。方法如下: void rgb2cmyk(cv::Mat& src, std::vector<cv::Mat>& cmyk) { CV_Assert(src.type() == CV_8UC3); cmyk.clear(); for (int i = 0; i < 4; ++i) cmyk.push_back(cv::Mat(src.size(), CV_32F)); for (int i = 0; i < src.rows; ++i) { for (int j = 0; j < src.cols; ++j) { cv::Vec3b p = src.at<cv::Vec3b>(i,j); float r = p[2] / 255.; float g = p[1] / 255.; float b = p[0] / 255.; float k = (1 - std::max(std::max(r,g),b)); cmyk[0].at<float>(i,j) = (1 - r - k) / (1 - k); cmyk[1].at<float>(i,j) = (1 - g - k) / (1 - k); cmyk[2].at<float>(i,j) = (1 - b - k) / (1 - k); cmyk[3].at<float>(i,j) = k; } } },java,c++,opencv,Java,C++,Opencv,您必须确保Mat的cmyk数组的大小为4。 在for循环中,我建议您使用setTo: for (int i = 0; i < 4; ++i) cmyk[i].setTo(new Mat(src.size(), CvType.CV_32F)); …希望这对您有所帮助您可以在这条线上找到: cmyk[0].at<float>(i,j) = (1 - r - k) / (1 - k); cmyk[0].at(i,j)=(1-r-k)/(1-k); 在转换为浮点之前,结

您必须确保Mat的cmyk数组的大小为4。 在for循环中,我建议您使用setTo:

for (int i = 0; i < 4; ++i)
    cmyk[i].setTo(new Mat(src.size(), CvType.CV_32F));

…希望这对您有所帮助

您可以在这条线上找到:

cmyk[0].at<float>(i,j) = (1 - r - k) / (1 - k); 
cmyk[0].at(i,j)=(1-r-k)/(1-k);
在转换为浮点之前,结果被处理为int,因为每个块都有整数开始。尝试:

cmyk[0].at<float>(i,j) = (1.0f - r - k) / (1.0f - k);
cmyk[0].at(i,j)=(1.0f-r-k)/(1.0f-k);

我想你已经有了一个关于如何访问该数组中元素的合理答案(via.put)。

你能展示一下你的尝试(不工作的Java代码)吗?@Banex我在我的原始帖子中添加了Edit secion。请查收。谢谢1)如果+
抛出异常
您可以使用或
,我还有另一行代码,从中我很难迁移到java。对不起,我从来没有真正的工作C++,这就是为什么我有麻烦在移植一些线。这是行
im1=cmyk[3].mul(1-cmyk[1])>0.25其中
im1
Mat
cmyk
Mat
类型的数组。。。如果你能指引我。thankscmyk[3].mul(1-cmyk[1])将是
mattmp
Core.subtract(Mat.one(cmyk[1].size(),cmyk[1].type()),cmyk[1],tmp)
im1=cmyk[3].mul(tmp)什么是“…>0.25”,我不知道@Khatrii还有另一行代码,从中我很难迁移到java。对不起,我从来没有真正的工作C++,这就是为什么我有麻烦在移植一些线。这里是im1=cmyk[3]行,mul(1-cmyk[1])>0.25;其中im1是Mat,cmyk是Mat类型的数组。。。如果你能指引我。谢谢
cmyk[0].at<float>(i,j) = (1 - r - k) / (1 - k); 
cmyk[0].at<float>(i,j) = (1.0f - r - k) / (1.0f - k);