用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太多了,特别是有漢語時。