Наверное, я очень опаздываю на вечеринку.
Как уже говорилось ранее, вызов input.nextLine()
после получения вашего значения int решит вашу проблему. Причина, по которой ваш код не работал, заключается в том, что с вашего ввода (куда вы ввели int) ничего не оставалось хранить в string1
.
Рассмотрим nextLine () как нечетный среди методов nextFoo () в классе Scanner. Давайте возьмем быстрый пример. Скажем, у нас есть две строки кода, подобные приведенным ниже:
int firstNumber = input.nextInt();
int secondNumber = input.nextInt();
Если мы вводим значение ниже (как одну строку ввода)
54 234
blockquote>Значение нашей переменной
firstNumber
иsecondNumber
становится 54 и 234 соответственно. Причина, по которой это работает, заключается в том, что новый канал ( i.e\n ) НЕ НЕ автоматически генерируется, когда метод nextInt () принимает значения. Он просто берет «следующий int» и движется дальше. Это то же самое для остальных методов nextFoo (), за исключением nextLine ().nextLine () генерирует новый фид строки сразу после принятия значения; это то, что означает @RohitJain, говоря, что новый канал «потребляется».
Наконец, метод next () просто берет ближайшую строку без создания новой строки; это делает это предпочтительным методом для взятия отдельных строк в одной и той же строке.
Надеюсь, это поможет ... Веселая кодировка!
1) Вы можете использовать VideoCapture
с именем filename :
имя_файла - имя открытого видеофайла (например, video.avi) или последовательность изображений (например, img_% 02d.jpg, который будет читать образцы, такие как img_00.jpg, img_01.jpg, img_02.jpg, ...)
blockquote>2) Или просто измените имя изображение для загрузки по счетчику.
#include <opencv2/opencv.hpp> #include <string> #include <iomanip> #include <sstream> int main() { std::string folder = "your_folder_with_images"; std::string suffix = ".jpg"; int counter = 0; cv::Mat myImage; while (1) { std::stringstream ss; ss << std::setw(4) << std::setfill('0') << counter; // 0000, 0001, 0002, etc... std::string number = ss.str(); std::string name = folder + number + suffix; myImage = cv::imread(name); cv::imshow("HEYO", myImage); int c = cv::waitKey(1); counter++; } return 0; }
3) Или вы можете использовать функцию glob , чтобы сохранить все имена файлов, соответствующие заданному шаблону в векторе, а затем сканировать вектор. Это будет работать и для несколких чисел.
#include <opencv2/opencv.hpp> using namespace cv; int main() { String folder = "your_folder_with_images/*.jpg"; vector<String> filenames; glob(folder, filenames); Mat myImage; for (size_t i = 0; i < filenames.size(); ++i) { myImage = imread(filenames[i]); imshow("HEYO", myImage); int c = cv::waitKey(1); } return 0; }