从矢量字符串中读取和拉直多个图像,得到错误:"vector subscript out of range" [c++]
Read and straighten multiple images from vector string, get error: "vector subscript out of range" [c++]
嘿,我尝试从文件夹中加载所有图像,然后拉直它们,然后将所有新图像写入新文件夹。我的代码有效,但并非一切都很好。在4-5图像程序崩溃,我收到错误消息:
"调试评估失败!(...)行:1201 表达式:向量下标超出范围"
这是我的代码部分:
int main()
{
system("dir Klasa_pierwsza\*.tiff /b > lista_zdjęć.txt");
add_list_of_names_images_tiff_to_string_vector("lista_zdjęć.txt", lista);
display(lista);
std::vector<cv::Point> wektor_straighten_images2;
cv::Mat *M = new Mat[lista.size()];
for (int i = 0; i < lista.size(); i++)
{
M[i] = imread("Klasa_pierwsza\" + lista[i]);
cv::cvtColor(M[i], bw, CV_BGR2GRAY);
cv::blur(bw, bw, cv::Size(3, 3));
cv::Canny(bw, bw, 100, 100, 3); // 200
std::vector<cv::Vec4i> lines;
cv::HoughLinesP(bw, lines, 1, CV_PI / 180, 70, 30, 10);
cv::Vec4i v1 = lines[3]; // lines[2,5,10
wektor_straighten_images2.push_back(cv::Point(v1[0], v1[1]));
wektor_straighten_images2.push_back(cv::Point(v1[2], v1[3]));
cv::line(M[i], cv::Point(v1[0], v1[1]), cv::Point(v1[2], v1[3]), CV_RGB(0, 255, 0)); // rysowanie linii na obrazku im0
double angle = std::atan((double)(wektor_straighten_images2[0].y - wektor_straighten_images2[1].y) / (wektor_straighten_images2[0].x - wektor_straighten_images2[1].x)) * (180 / CV_PI);
cv::Point2f center(M[i].cols / 2., M[i].rows / 2.);
cv::Mat dst, r = cv::getRotationMatrix2D(center, angle, 1.0);
cv::warpAffine(M[i], dst, r, M[i].size());
cv::imwrite("Zapisane\" + lista[i], dst);
}
这是我的功能"add_list_of_names_images_tiff_to_string_vector"
void add_list_of_names_images_tiff_to_string_vector(String k,vector<string> &wektor)
{
ifstream in(k);
if (!in)
{
cout << "Can't read.n";
}
char str[255];
while (in)
{
in.getline(str, 255);
wektor.push_back(str);
}
wektor.pop_back();
in.close();
}
也许有人对我有一个很好的提示。请帮忙。
我为什么要这样做?:我必须创建程序来拉直文件夹中的所有图像,但图像名称未知。
编辑:
嗯问题在这里: cv::Vec4i v1 = lines[3];
但是什么样的问题呢?
代码中的一个问题是,你从不检查操作的结果,应该有:
M[i] = imread("Klasa_pierwsza\" + lista[i]);
if ( M[i].empty() )
{
cerr << "Klasa_pierwsza\" + lista[i] << " could not be loaded !" << endl;
continue;
}
// ...
std::vector<cv::Vec4i> lines;
cv::HoughLinesP(bw, lines, 1, CV_PI / 180, 70, 30, 10);
if ( lines.size() < 4 )
{
cerr << "Klasa_pierwsza\" + lista[i] << " did not have 4 lines !" << endl;
continue;
}
cv::Vec4i v1 = lines[3]; // you have an access violation (out of bounds) here.
相关文章:
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- vector.resize()中的分配错误
- 在某些循环内使用vector.push_back时出现分段错误
- 尝试使用 std::vector<std::thread时出现静态断言失败错误>
- "no matching function for call to 'Vector::Vector'"错误
- 为什么当 vector 为空时会显示运行时错误?
- 将 vector<vector<int>> 传递到函数中会产生内存错误
- C++ 向量加减抛出"expression: vector subscript out of range."错误
- 错误:调用"es_queue::set_rpc_vector(std::vector >&, std::__cxx11::string)"没有匹配函数
- AddressSanitizer 将 std::vector<T>::p ush_back 标识为释放后堆使用错误的原因
- 在c++Primer中使用Struct和Vector时出现错误C2661
- 编译错误 std::vector<std::shared_ptr<T>>迭代器和擦除方法
- 如何解决'vector subscript out of range'错误?
- 错误 C2280 / 在 std::vector 中实例化对象时复制构造函数出现问题?
- 迭代 std::vector 时的分段错误
- C++如果调用 vector,矢量分割错误会导致崩溃
- 在调用中使用 std::vector,<double>但收到有关 std::vector<double、std::分配器>正在使用的错误<double>
- Boost的属性.Spirit语法:Boost::variant的std:vector错误
- Qt #include <vector> 错误
- 获取"terminating with uncaught exception of type std::length_error: vector"错误C++