为什么从OpenCV Python示例中读取图像会出现错误,而在C++中不会出现错误?

12

我正在尝试在OpenCV Python中读取一张图片。

import cv2
import numpy as np

# Read images
image=cv2.imread(cv2.samples.findFile("lena.jpg"))
cv2.imshow("image",image)
cv2.waitKey(0)

并且会出现以下错误
[ WARN:0] global C:\projects\opencv-python\opencv\modules\core\src\utils\samples.cpp (59) cv::samples::findFile cv::samples::findFile('lena.jpg') => ''
Traceback (most recent call last):
  File "D:/all_libraries/main.py", line 5, in <module>
    image=cv2.imread(cv2.samples.findFile("lena.jpg"))
cv2.error: OpenCV(4.1.1) C:\projects\opencv-python\opencv\modules\core\src\utils\samples.cpp:62: error: (-2:Unspecified error) OpenCV samples: Can't find required data file: lena.jpg in function 'cv::samples::findFile'

然而,C++ 版本却没有给出任何错误提示。


#include <iostream>

#include <opencv2/core.hpp>
#include <opencv2/ml.hpp>
#include <opencv2/highgui.hpp>

using namespace std;
using namespace cv;
using namespace cv::ml;
int main()
{

    Mat image;
    image=imread(samples::findFile("lena.jpg"));
    imshow("lena.jpg",image);
    waitKey(0);

    return 0;
}

我已在 pycharm 安装了 OpenCV 4.1.1,C++ 版本也是 4.1.1,操作系统为 Windows。


1
似乎Python不知道这个图像在哪里。也许它没有在磁盘上。您可以从GitHub下载:https://github.com/opencv/opencv/tree/master/samples/data - furas
在 PyCharm 虚拟环境中,我应该把这个数据文件放在哪里? - Gourav Roy
3
您可以将它放在任何地方,然后使用 cv2.imread("/path/to/image/lena.jpg") 进行操作,无需使用 cv2.samples.findFile() - furas
4个回答

8

我在运行第一个OpenCV教程时遇到了同样的问题,以下方法对我有效。我使用的是PyCharm社区版和Python。addSamplesDataSearchSubDirectory无法使用。

cv.samples.addSamplesDataSearchPath("C:\\......\\opencv\\sources\\samples\\data")
img = cv.imread(cv.samples.findFile("starry_night.jpg"))

我遇到的问题是,无论是pip install opencv-python还是pip install opencv-contrib-python都没有安装示例图像。我不得不使用git clone https://github.com/opencv/opencv将示例文件克隆到本地,然后通过在GitHub克隆中指定样本目录的完整路径来解决此问题。 - DocOc

3
在Python中,findFile函数使用环境变量来定义搜索路径。当您安装OpenCV时,您会创建一个类似于C:\ something \ samples \ data的文件夹(我猜测一下,因为我使用Linux而不是Windows)。因此,您需要将环境变量OPENCV_SAMPLES_DATA_PATH设置为值C:\ something \ samples \ data,然后尝试运行您的代码。
有一些相关文档(但不足以有用)在https://docs.opencv.org/3.4/d6/dba/group__core__utils__samples.html

0

试一下这个!

  1. 进入环境变量,创建一个新参数"OPENCV_SAMPLES_DATA_PATH"
  2. 将位置".../sample/data"添加到您的值中
  3. 重新启动IDE
  4. 就可以自动运行示例数据了。

0

尝试使用image=cv2.imread(args["image1"])而不是image=cv2.imread(cv2.samples.findFile("lena.jpg")),即将文件路径作为参数传递。以下是应该适用于您的问题的完整代码:

import cv2
import numpy as np
import argparse

ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required=True, help="Path to the image")
args = vars(ap.parse_args())

# Read images
image=cv2.imread(args["image"])
cv2.imshow("image",image)
cv2.waitKey(0)

现在尝试使用以下命令运行您的代码:
python 文件名.py -i "./lena.jpg"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接