イメージパスのベクトルを反復処理して、cv :: imread関数で読み込み、結果のcv :: Matにformat_signal関数を使用しています。 。OpenCV - ベクトルを反復処理するときに "無効なパラメータ"
#include "tp1.hpp"
using ImagePathFlag = std::pair<std::string, int>;
int main(int /*argc*/, char** /*argv*/) {
try {
const std::vector<ImagePathFlag> vsTestImages = {
{ "data/test1.png",cv::IMREAD_GRAYSCALE },
{ "data/test2.png",cv::IMREAD_GRAYSCALE },
{ "data/test3.png",cv::IMREAD_GRAYSCALE },
{ "data/test4.png",cv::IMREAD_COLOR },
{ "data/test5.png",cv::IMREAD_COLOR },
{ "data/test6.png",cv::IMREAD_COLOR },
{ "data/test7.png",cv::IMREAD_COLOR },
{ "data/test8.jpg",cv::IMREAD_COLOR },
{ "data/test9.bmp",cv::IMREAD_COLOR },
{ "data/test10.bmp",cv::IMREAD_COLOR },
};
for (const ImagePathFlag& oImagePathFlag : vsTestImages) {
std::cout << oImagePathFlag.first << std::endl;
cv::Mat oInputImg = cv::imread(oImagePathFlag.first, oImagePathFlag.second);
if (oInputImg.empty())
CV_Error_(-1, ("Could not load image at '%s', check local paths", oImagePathFlag.first.c_str()));
std::vector<uint8_t> signal = format_signal(oInputImg);
}
}
catch (const cv::Exception& e) {
std::cerr << "Caught cv::Exceptions: " << e.what() << std::endl;
}
catch (const std::runtime_error& e) {
std::cerr << "Caught std::runtime_error: " << e.what() << std::endl;
}
catch (...) {
std::cerr << "Caught unhandled exception." << std::endl;
}
return 0;
}
format_signalとlz77_encode細かいループの最初の反復または動作しているようですが、この最初の反復の終わりに、次のエラーでプログラムの開発がクラッシュ:
Unhandled exception at 0x00007FFE6E5D4388 (ucrtbase.dll) in inf4710_tp1.exe: An invalid parameter was passed to a function that considers invalid parameters fatal.
かなりわかりませんここで何が起こっているのですか?私は、forループの構文が私の先生によって提供されたのと同じように完全に理解していないことを認めています。
助けが必要ですか?
EDIT
inline std::vector<uint8_t> format_signal(const cv::Mat& oInputImage) {
CV_Assert(!oInputImage.empty() && oInputImage.isContinuous() && (oInputImage.type() == CV_8UC1 || oInputImage.type() == CV_8UC3));
std::vector<uint8_t> vSignal;
cv::imencode(".png", oInputImage, vSignal);
return vSignal;
}
トピックを表示:教師から最新のC++コードを入手しましたか?クロム!未来への希望がある! – user4581301
問題は確かに 'lz77_encode'にあります。バッファオーバーラン、または他の形式のスタック破損のいずれかが発生します。ソースを見ずに言うのは難しい。 – user58697
メインでlz77_encodeを呼び出さなくても問題は解決しません。これを示すために私のコードを編集しました。 –