我试图在 Linux 上使用OpenCV读取多个名为001.jpg,002.jpg,003.jpg及以后的图像文件,并在延迟一段时间后在窗口中显示它们。这是我的代码 -
int main(int argc, char ** argv){
cv::VideoCapture cam("/home/bikz05/Desktop/dataset/%03d.jpg");
if (!cam.isOpened())
cout << "Capture is not opened";
cv::Mat image;
const string Window = "Image Number";
namedWindow(Window, CV_WINDOW_NORMAL);
while(true) {
cam >> image;
if (!image.data) {
std::cout << "Preview Ends" << std::endl;
break;
}
cv::imshow(Window, image);
waitKey(1000);
}
return 0;
}
在主要功能的第一行,我甚至尝试使用
cv::VideoCapture cam("/home/bikz05/Desktop/dataset/001.jpg");
我甚至尝试将图像放在与二进制文件相同的文件夹中,即使没有帮助。
在这两种情况下,它只显示第一张图像,然后程序退出。请注意,它没有完成。
P.S。 - Stack Exchange和opencv.org提供的答案未产生预期结果。
答案 0 :(得分:2)
您编写的代码有几个问题,但如果您要从磁盘读取图像,请使用cv::imread()
代替cv::VideoCapture
:
std::string filename = "/home/bikz05/Desktop/dataset/001.jpg";
const std::string Window = "Image Number";
cv::namedWindow(Window, CV_WINDOW_NORMAL);
while (true)
{
cv::Mat image = cv::imread(filename.c_str());
if (!image.data)
{
std::cout << "!!! File not found: " << filename << std::endl;
break;
}
cv::imshow(Window, image);
cv::waitKey(1000);
// And before the loop ends, update filename with the next image:
// filename = ???;
}
我没有测试过这个,但我相信你明白了。
答案 1 :(得分:0)
在glob(folderpath, vectorOfimages)
中使用glob,然后以vectorOfimages[i]
访问每个图像。
vectorOfimages是
vector<String>
和folderpath是一个字符串。
我遇到了同样的问题而videoCapture
无法解决问题。