天天看點

用vs2017編寫opencv程式,出現下列錯誤OpenCV Error: Assertion failed (size.width>0 && size.height>0) in cv::imshow

用vs2017編寫opencv程式,出現下列錯誤OpenCV Error: Assertion failed (size.width>0 && size.height>0) in cv::imshow file C:\build\master_winpack-build-win64-vc14\opencv\modules\highgui\src\window.cpp, line 325,

下面是我的出現問題的代碼:

// main.cpp: 定義控制台應用程式的入口點。
//
#include "stdafx.h"
#include "cv.h"                             //  OpenCV 檔案
#include "cvaux.h"
#include "cxcore.h"
#include "opencv2/opencv.hpp"
#include<opencv2/imgproc/imgproc.hpp>
#include "opencv2/highgui/highgui.hpp" 
#include <iostream>
#include <string>

using namespace cv;
using namespace std;

//-----------------------------------【main( )函數】--------------------------------------------
//		描述:控制台應用程式的入口函數,我們的程式從這裡開始
//-------------------------------------------------------------------------------------------------
int main()
{
	//【0】載入原始圖  
	Mat srcImage;
	 srcImage = imread("1.jpg");
	imshow("yuanshitu", srcImage); 	//顯示原始圖 
	Mat dstImage, edge, grayImage;	//參數定義

									//【1】建立與src同類型和大小的矩陣(dst)
	dstImage.create(srcImage.size(), srcImage.type());

	cvtColor(srcImage, grayImage, COLOR_BGR2GRAY);

	//【3】先用使用 3x3核心來降噪
	blur(grayImage, edge, Size(3, 3));

	//【4】運作Canny算子
	Canny(edge, edge, 3, 9, 3);

	//【5】顯示效果圖 
	imshow("xiaoguotu", edge);

	waitKey(66666660);

	return 0;
}
           

出現這個問題很有可能是讀取圖檔沒有讀到,在于imshow要顯示的srcImage為空的,也就是說imread函數沒有讀取到圖檔,解決方法是用絕對路徑去讀取,重新寫一遍,就成功了。

成功代碼

// main.cpp: 定義控制台應用程式的入口點。
//
#include "stdafx.h"
#include "cv.h"                             //  OpenCV 檔案
#include "cvaux.h"
#include "cxcore.h"
#include "opencv2/opencv.hpp"
#include<opencv2/imgproc/imgproc.hpp>
#include "opencv2/highgui/highgui.hpp" 
#include <iostream>
#include <string>

using namespace cv;
using namespace std;

//-----------------------------------【main( )函數】--------------------------------------------
//		描述:控制台應用程式的入口函數,我們的程式從這裡開始
//-------------------------------------------------------------------------------------------------
int main()
{
	//【0】載入原始圖  
	Mat srcImage;
	 srcImage = imread("D:\\OpenCVproject\\8_21_5\\main\\main\\1.jpg");
	imshow("yuanshitu", srcImage); 	//顯示原始圖 
	Mat dstImage, edge, grayImage;	//參數定義

									//【1】建立與src同類型和大小的矩陣(dst)
	dstImage.create(srcImage.size(), srcImage.type());

	cvtColor(srcImage, grayImage, COLOR_BGR2GRAY);

	//【3】先用使用 3x3核心來降噪
	blur(grayImage, edge, Size(3, 3));

	//【4】運作Canny算子
	Canny(edge, edge, 3, 9, 3);

	//【5】顯示效果圖 
	imshow("xiaoguotu", edge);

	waitKey(66666660);

	return 0;
}
           

二者看似沒有什麼不同,其實問題就出現這裡imread(“D:\OpenCVproject\8_21_5\main\main\1.jpg”);路徑要正确。

當然這隻能解決部分人的問題。感覺vs2017bug太多了,特别是有漢語時。

繼續閱讀