Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.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++ 返回黑色图像的opencv分割_C++_Opencv - Fatal编程技术网

C++ 返回黑色图像的opencv分割

C++ 返回黑色图像的opencv分割,c++,opencv,C++,Opencv,我目前正在为一个类做一个分段项目,需要使用任何opencv函数创建我自己的分段。我最初的想法是在过滤后使用带有5x5内核的形态学梯度(因为我之前的测试表明梯度提供了更好的边缘,这正是我想要做的)。这产生了一个黑色的图像(在一张照片的情况下没有结果)。代码编译后决定使用Canny边缘检测进行测试。这也会产生与黑色图像相同的结果,而不是边缘检测。所以现在我想知道我正在使用的代码中是否有一个愚蠢的错误 这里的代码(c++在OS X 10.10.2上使用Xcode) // //myseg.cpp //

我目前正在为一个类做一个分段项目,需要使用任何opencv函数创建我自己的分段。我最初的想法是在过滤后使用带有5x5内核的形态学梯度(因为我之前的测试表明梯度提供了更好的边缘,这正是我想要做的)。这产生了一个黑色的图像(在一张照片的情况下没有结果)。代码编译后决定使用Canny边缘检测进行测试。这也会产生与黑色图像相同的结果,而不是边缘检测。所以现在我想知道我正在使用的代码中是否有一个愚蠢的错误

这里的代码(c++在OS X 10.10.2上使用Xcode)

//
//myseg.cpp
//  
//
//由Mobin Anandwala于2015年3月16日创建,于2015年3月17日更新。
//
//
#包括“opencv2/core/core.hpp”
#包括“opencv2/highgui/highgui.hpp”
#包括“opencv2/imgproc/imgproc.hpp”
#包括
#包括
使用名称空间cv;
//全局变量
Mat图像、图像灰度、最终、最终seg;
//源图像灰度图像最终图像最终图像分割
int const kernel=5;//内核大小
int const lowsthreshold=0;//精明的
//morphologyEx函数的运算符使用梯度
int const maxlowthreshold=20;
内部常数比=3;
const char*window_name=“MySeg Output”;
void myseg(垫和图像)
{
//使用5x5内核实现模糊过滤器以消除噪声
模糊(图像灰度、最终分割、大小(内核、内核));
Canny(final_seg,final_seg,lowthrreshold,maxlowthreshold*比率,内核);
final=Scalar::all(0);//创建掩码
image.copyTo(final_seg,final);
imshow(窗口名称、最终分段);
}
/**函数头**/
无效myseg(Mat和image);
int main()
{
///加载图像
image=imread(“/Users/mobinand/ECE\59500/Project2/myseg/Yosemite1.jpg”,1);
如果(!image.data)
{return-1;}
final.create(image.size(),image.type());//创建最终图像标记
CVT颜色(图像,图像_灰度,CV_BGr2灰度);//灰度
myseg(图像);
///创建窗口
namedWindow(窗口名称,窗口自动大小);
imwrite(“/Users/mobinand/ECE\59500/Project2/myseg/test.jpg”,最终版本);
等待键(0);
返回0;
}
我已经查看了列出的类似问题,它们没有参考我要查找的内容,很可能我在这里的某个地方犯了一个愚蠢的错误,这不是代码错误,更像是PBEBKAC错误,也许一些新的眼睛会显示错误。

您正在保存到文件“最终”图像:

但是图像是用

final = Scalar::all(0);
所以最终图像总是由零填充。也

image.copyTo(final_seg,final);
使用“final”作为掩码将“image”复制到“final_seg”中,因此不复制任何元素。也许你的意思正好相反:

image.copyTo(final,final_seg);

这将使用“final_seg”作为掩码将“image”复制到“final”中。

如果要使用OpenCV
namedWindow()
显示任何内容,必须确保显示的
Mat
的值在0.0-1.0范围内。那么在这种情况下,我的最终图像基本上是一个0的矩阵吗?我试着根据OpenCV示例代码对此进行建模,我想我是在对显示的图像应用边缘检测。我需要打印出最终的图像吗?
image.copyTo(final_seg,final);
image.copyTo(final,final_seg);