当前位置: 首页 > 知识库问答 >
问题:

OpenCV错误:CV::MAT第522行断言失败

韦寒
2023-03-14
void divideImage(Mat input_image, vector<Mat> output_images, int width_fraction, int height_fraction ) {

int width = input_image.rows / width_fraction - 1;
int height = input_image.cols / height_fraction - 1;

    for (int w = 0; w < input_image.rows; w+=width) {
        for (int h = 0; h < input_image.cols; h+=height) {
            Mat tiles = input_image(Rect(w, h, width, height));
            output_images.push_back(tiles);
        }
    }
}



int main(int argc, char** argv)
{

// Get parameters from command line
CommandLineParser parser(argc, argv, keys);
String image_path1 = parser.get<String>(0);

    if (image_path1.empty())
    {
        help();
        return -1;
    }

// Load image 
cv::Mat img_1_rgb = imread(image_path1, 1);
Mat img_1;
cvtColor(img_1_rgb, img_1, CV_BGR2GRAY);

vector<Mat> output_images(4);

divideImage(img_1, output_images, 2, 2);
 void divideImage(Mat input_image, vector<Mat> output_images, int width_fraction, int height_fraction ) {

 int width = (input_image.cols / width_fraction) - 1;
 int height = (input_image.rows / height_fraction) - 1;

for (int w = 0; w < input_image.cols-width_fraction*width_fraction; w+=width) {
    for (int h = 0; h < input_image.rows-height_fraction*height_fraction; h+=height) {
        Mat tiles = input_image(Rect(w, h, width, height));
        output_images.push_back(tiles);
        //cout << w << " " << h << " " << width << " " << height << " " << endl;
    }
}

共有1个答案

归松
2023-03-14

你的代码错了。我举个例子:

假设您的图像大小为640x480

现在,让我们使用相同的参数来计算函数的宽度变量

int width = 640 / 2 - 1; // 319
Rect(0, 0, 319, 239)
Rect(319, 0, 319, 239)
Rect(638, 0, 319, 239)
638 + 319 <= 640

您必须改变它的循环方式,在它工作的最佳情况下,您将松散n列/行,即n个划分数。(您可以尝试设置一个限制,如

input_image.rows - width_fraction

在for循环检查中,如果不关心删除的列。

进一步建议,了解如何使用调试器!!它应该跳转到断言,除非您在发布模式下运行它,否则,代码应该总是失败。

 类似资料:
  • 我试图创建一个ROI以上的脸检测到放置一顶帽子,如图所示:Plz点击这里:ROI以上的脸创建放置一顶帽子 OpenCV错误:断言失败(0<=ROI.X&&0<=ROI.Width&&ROI.X+ROI.Width<=M.cols&&0<=ROI.Y&&0<=ROI.Y&&0<=ROI.Y&&0<=ROI.Height&&ROI.Y+ROI.Height<=M.rows)在Mat中,文件/home/

  • 我正在用java开发一个程序,该程序使用opencv库获取一个图像文件夹并裁剪人脸。它使用了OpenCV中的人脸识别。我使用了它,但当我尝试使用更大的图像文件夹时,它会出现以下错误: OpenCV错误:Cv::OutOfMemoryError中内存不足(无法分配411068928字节),文件C:\builds\master_packslaveAddon-Win32-VC12-static\Open

  • 我是Python和OpenCV的初学者。我正在尝试一段代码,它从网络摄像头获取输入图像。下面是一段代码。 我同时使用Python2.7和Python3.4来执行此操作。在这两方面,我都面临一个奇怪的问题。代码给出了如下断言错误 OpenCV错误:cv::cvtColor,文件中的断言失败(scn==3 | | scn==4)。。。。。。。。\opencv\modules\imgproc\src\c

  • 我需要使用openFileDialog读取Mat格式的图像,并将其显示在pictureBox中(在VisualC/VisualStudio2010中)。 我找了很多,但找不到答案。 我正在使用此代码:

  • 在我的应用程序中,我有一个通过引用接收CV::MAT对象的函数。下面是函数的声明: 这个函数是递归的,在主函数的第一次调用中并不真正需要aaa,所以我只是声明了一个空aaa来将它传递给函数调用。在随后的递归调用中,function生成自己的ch Mat对象。 Main.cpp:75:错误:从“CV::MAT(*)()”类型的临时值初始化“CV::MAT&”类型的非常量引用无效。H:21:错误:在传

  • 我试图用Hibernate创建MySQL表, 错误[org.hibernate.tool.hbm2ddl.schemaupdate](ServerService线程池--12)HHH000388:失败:create table parcel_parcels(id bigint不为null,说明文本,从varchar(255)到varchar(255),成本双精度,路由varchar(255),主键