gpt4 book ai didi

opencv - 更改图像opencv的宽度步长

转载 作者:行者123 更新时间:2023-12-02 17:50:12 24 4
gpt4 key购买 nike

我正在从事与人脸识别相关的项目。为了使我的程序正常工作,每个图像应满足img->widthStep = 3 * img->width条件。

我正在尝试在数据库中的每个图像大小为250x250的代码。但是数据库的宽度步长为752,因此上述条件不满足。 widthstep的功能是访问像素(http://opencv-users.1802565.n2.nabble.com/What-is-widthstep-td2679559.html)。

我可以在不影响图像其他参数的情况下将widthstep参数更改为750吗?
否则还有其他方法可以实现zimg->widthStep = 3 * img->widthz条件吗?

我尝试将250x250复制到260x260图像,如下所示

Mat img1, img2=Mat::zeros(Size(260,260),CV_8UC3);
img1 = imread(ch);
img1.copyTo(img2.colRange(1,250).rowRange(1,250));

但它显示此错误:
OpenCV Error: Assertion failed 
(!fixedSize() || ((Mat*)obj)->size.operator()() =
= Size(cols, rows)) in unknown function, file D:\opencv2.4.5\opencv\modules\core
\src\matrix.cpp, line 1372

谁能帮我吗。

谢谢!

最佳答案

  • 因为您使用的是widthStep术语,所以我猜您正在使用IplImage。 IplImage取自Intel Performance Primitives(IPP)库。为了获得良好的性能,要求每行的widthStep应该是4的倍数。为了强制执行此条件,必须用附加字节来填充行。因此,只要您使用IplImage,您将无法使widthStep等于750,而不是4的倍数。
  • OpenCV 1基于IplImage,而OpenCV 2基于Mat。自IplImage被弃用已经过去了一年。
  • Mat没有这种限制。默认情况下,其步骤为750。

  • 编辑问题后:

    colRange(1,250)表示249列,而不是250列。rowRange(1,250)相同。当要复制的图像尺寸与目标图像尺寸不同时,将重新分配目标图像。但是由于colRange和rowRange返回恒定的临时镜像,因此无法重新分配它,并且程序崩溃。

    关于opencv - 更改图像opencv的宽度步长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23858908/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com