我有一些C++代码,除了函数之外,OpenCV的一切都运行良好imread(file).它正确找到文件并加载名称,但它没有加载任何数据.
Mat pattImage = imread(fileName, 0);
Run Code Online (Sandbox Code Playgroud)
在网上进行了一些研究后,我意识到我处于调试模式,但是发布了OpenCV库,而不是调试版.
debug library: opencv_core231d.lib
release library: opencv_core231.lib
Run Code Online (Sandbox Code Playgroud)
虽然这是一个典型的愚蠢错误,我认为这不应该做任何事情,调试库应该允许OpenCV代码调试,而发布库允许更快地执行代码,但我不明白为什么imread失败.
谁能解释一下OpenCV中调试和发布库之间的区别以及为什么会出现这个错误?
它是OpenCV的错误吗?
我遇到了一些基本的OpenCV代码问题.这是我的代码:
cv::Mat src;
src=imread("Calibration.bmp",0);
if (src.empty())
cout << "Cannot load image" << " ";
else
cout << src.cols << " " << src.rows << " ";
Run Code Online (Sandbox Code Playgroud)
不幸的是,cv :: imread返回任何类型的输入图像的NULL矩阵(我试过.bmp,.jpg).文件名似乎工作正常(程序不会以错误结束),因为使用错误的文件名会生成错误消息.我尝试过使用oldstyle"CvLoadImage",但结果却一样.有谁知道如何解决这个问题?
cv2.imread总是回来NoneType.
我在64位Windows 7上使用python版本2.7和OpenCV 2.4.6.
也许这是某种bug或权限问题,因为在另一台计算机上完全相同的python和cv2包安装工作正常.这是代码:
im = cv2.imread("D:\testdata\some.tif",CV_LOAD_IMAGE_COLOR)
Run Code Online (Sandbox Code Playgroud)
我从http://www.lfd.uci.edu/~gohlke/pythonlibs/#opencv下载了OpenCV .任何线索将不胜感激.
我在Windows XP 32位下使用OpenCV 2.4.2的VideoCapture类时遇到问题.它没有打开任何文件或相机,并修复它是一个痛苦.我正在使用visual studio 2010,但我也在QTcreator中尝试了相同的结果.
测试代码如下:
#include "opencv/cv.h"
#include "opencv/highgui.h"
#include <iostream>
#include <string>
#include <iomanip>
#include <sstream>
using namespace cv;
using namespace std;
int main()
{
const char* videoPath = "C:/video/";
string videoName = string(videoPath) + "avi.avi";
VideoCapture cap(videoName);
if(!cap.isOpened())
{
std::cout<<"Fail"<<std::endl;
return -3;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出始终为"-3".Qt Creator显示警告:打开文件时出错(../../modules/highgui/src/cap_ffmpeg_impl.hpp:361)
我调试了它,问题出现在第一行:
CvCapture* cvCreateFileCapture_FFMPEG_proxy(const char * filename)
{
CvCapture_FFMPEG_proxy* result = new CvCapture_FFMPEG_proxy;
if( result->open( filename ))
return result;
delete result;
#if defined WIN32 || defined _WIN32
return cvCreateFileCapture_VFW(filename); …Run Code Online (Sandbox Code Playgroud) 我试图在我的C++代码中读取图像
LOGD("Loading image '%s' ...\n", (*inFile).c_str());;
Mat img = imread(*inFile, CV_LOAD_IMAGE_GRAYSCALE);
CV_Assert(img.data != 0);
Run Code Online (Sandbox Code Playgroud)
并获得以下输出:
09-25 17:08:24.798: D/IRISREC(12120): Loading image '/data/data/com.example.irisrec/files/input/osoba1.jpg' ...
09-25 17:08:24.798: E/cv::error()(12120): OpenCV Error: Assertion failed (img.data != 0) in int wahet_main(int, char**), file jni/wahet.cpp, line 4208
Run Code Online (Sandbox Code Playgroud)
该文件存在.但奇怪的是,如果我尝试使用根文件浏览器预览图像,它只是黑色.我手动复制了文件.
编辑:
该代码在Windows下以.png和.jpg格式正常工作.我只是想将现有的Iris C++ C++项目移植到Android上.
我在Eclipse中编写了一个使用OpenCV4Android API 的Android应用程序.如何Mat轻松显示图像,仅用于调试?在C++中,根据OpenCV教程,您可以执行以下操作:
namedWindow( "Display window", CV_WINDOW_AUTOSIZE );// Create a window for display.
imshow( "Display window", image ); // Show our image inside it.
Run Code Online (Sandbox Code Playgroud)
但Android的Java API似乎没有namedWindow内部功能org.opencv.highgui.Highgui.
另外,我想将图像加载为灰度.在C++中,根据imread不在Opencv中工作,你会做:
imread("blackandwhite.jpg", 0);
Run Code Online (Sandbox Code Playgroud)
但Java API Highgui.imread()只有filename参数.
我有一个问题,我不确定它来自哪里。请看一下这个函数:
http://pastie.org/8200205
imread 似乎返回空矩阵。
需要明确的是,我的图像位于 ImageData 目录中,它是我的程序所在的直接位置,对于像苹果这样的每种对象类型,我有一个像对象类型一样调用的目录,里面是所有苹果图像(如果这是当前的)对象类型)
此外,我正在使用 cmake,但我很确定我不必包含没有任何代码的目录。
那么这里有什么问题呢?是我的路径错误还是 imread 在子目录中不起作用?
我很感激任何建议/解决方案:)