【发布时间】:2016-03-09 07:28:28
【问题描述】:
我目前正在使用 openCV 进行一些 C++ 图像处理。我在 Mac 上使用 Xcode 6.3.2 开发了该应用程序,它在调试和发布时都能完美运行。为了有一个 Windows 可执行程序,我现在正在使用 Visual Studio Express 2013 在 Windows 上工作。该程序在调试模式下运行良好,但在这部分代码的发布模式下崩溃:
#include "stdafx.h"
#include "math.h"
#include <iostream>
#include "opencv2/core/core.hpp"
#include "opencv2/core/core_c.h"
#include "opencv2/opencv.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/highgui/highgui_c.h"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/imgproc/imgproc_c.h"
#include "opencv2/photo/photo.hpp"
#include "opencv2/features2d/features2d.hpp"
using namespace cv;
using namespace std;
int main(int argc, const char** argv)
{
vector<Mat> stacked_images;
Mat medianr_eq, mediang_eq, medianb_eq, objrgb;
medianr_eq = imread("C:\\Path\\medianr_eq.png", CV_LOAD_IMAGE_GRAYSCALE);
mediang_eq = imread("C:\\Path\\mediang_eq.png", CV_LOAD_IMAGE_GRAYSCALE);
medianb_eq = imread("C:\\Path\\medianb_eq.png", CV_LOAD_IMAGE_GRAYSCALE);
objrgb = Mat(medianr_eq.size(), CV_16UC3);
stacked_images.clear();
stacked_images.push_back(medianb_eq); /*B*/
stacked_images.push_back(mediang_eq); /*G*/
stacked_images.push_back(medianr_eq); /*R*/
merge(stacked_images, objrgb);
}
我得到的错误是:
OpenCV Error : Assertion failed <mv && n > 0> in cv::merge, file C:\builds\master_PackSlave_Win64-vc12-shared\opencv\modules\core\src\convert.cpp, line 941
我看不出我在哪里做错了......确实,这是非常基本的 OpenCV!
我使用的图片可以通过这个链接下载:https://transfert.u-psud.fr/gs67
对于天文学爱好者来说,这是斯蒂芬五重奏组,由卡拉尔奥托天文台的 1.23m 望远镜拍摄,我目前是那里的实习生。
提前感谢您的帮助, 阿诺。
【问题讨论】:
-
您将 objrgb 声明为 CV_8UC1,而它应该是 CV_8UC3。但是,合并应该正确创建它...
-
哦,是的,抱歉,我在最后一分钟更改了它...事实上,我之前使用的是 CV_16UC3(图像以 16 位编码),我也遇到了同样的问题。我要编辑我的问题。
-
尝试使用您的图像。这个对我有用。但是,您可以删除
objrgb = Mat(medianr_eq.size(), CV_16UC3);行,因为合并将创建objrgb正确的大小和类型。 -
另外,
imread加载 CV_8UC3 图像,而不是 CV_16UC3 -
好的,非常感谢。你在使用 Visual Studio 吗?你认为问题可能来自我的 OpenCV 库的安装吗?