在opencv中实现For循环? 我想在开放式CV中实现类似的循环。这个代码是在MATLAB中完成的。因为我是新的开放式CV。我不知道如何继续。有人能给我在C++中的想法吗? for m=1:10 for n=1:20 for l=1:Ns for k=1:Ns Y(l,k)=image1(m-Ns+l-1,n-Ns+k-1); DD(l,k)=image2(m-Ns+l-1,n-Ns+k-1); end end e=Y-DD ; end end

在opencv中实现For循环? 我想在开放式CV中实现类似的循环。这个代码是在MATLAB中完成的。因为我是新的开放式CV。我不知道如何继续。有人能给我在C++中的想法吗? for m=1:10 for n=1:20 for l=1:Ns for k=1:Ns Y(l,k)=image1(m-Ns+l-1,n-Ns+k-1); DD(l,k)=image2(m-Ns+l-1,n-Ns+k-1); end end e=Y-DD ; end end,c++,matlab,opencv,C++,Matlab,Opencv,此处,图像1和图像2的大小为300*300像素。Y、DD、image1、image2 al是mat图像。在OpenCV中,图像可以表示为mat或IplImage。您的问题没有指定图像的类型 如果IplImage: IplImage *img; unsigned char *image = (unsigned char*)(img->imageData); int imageStride = img->widthStep; pixData = image[xCount + yCount

此处,图像1和图像2的大小为300*300像素。Y、DD、image1、image2 al是mat图像。

在OpenCV中,图像可以表示为
mat
IplImage
。您的问题没有指定图像的类型

如果IplImage:

IplImage *img;
unsigned char *image = (unsigned char*)(img->imageData);
int imageStride = img->widthStep;
pixData = image[xCount + yCount*imageStride];
Mat img;
unsigned char *image = (unsigned char*)(img.data);
int imageStride = img.step;
pixData = image[xCount + yCount*imageStride];
如果垫子:

IplImage *img;
unsigned char *image = (unsigned char*)(img->imageData);
int imageStride = img->widthStep;
pixData = image[xCount + yCount*imageStride];
Mat img;
unsigned char *image = (unsigned char*)(img.data);
int imageStride = img.step;
pixData = image[xCount + yCount*imageStride];
pixData
将在
(xCount,yCount)
处包含该数据。您可以在for循环中使用这种理解


正如您已经知道的逻辑一样,我只提到如何从图像中的特定点访问数据。

OpenCV中访问for循环中像素的最有效方法是:

cv::Mat rgbImage;
cv::Mat grayImage;
for ( int i = 0; i < rgbImage.rows; ++i )
  {
    const uint8_t* rowRgbI = rgbImage.ptr<uint8_t> ( i );
    const uint8_t* rowGrayI = grayImage.ptr<uint8_t> ( i );
    for ( int j = 0; j < rgbImage.cols; ++j )
      {
        uint8_t redChannel = *rowRgbI++;
        uint8_t greenChannel = *rowRgbI++;
        uint8_t blueChannel = *rowRgbI++;

        uint8_t grayChannel = *rowGrayI++
      }
  }
cv::Mat rgbImage;
cv::Mat灰度图像;
对于(int i=0;i
根据图像是一个还是多个频道,您可以修改上述代码

如果要实现窗口滑动,可以执行以下操作:

cv::Mat img;
int windowWidth = 5;
int windowHeight = 5;
for ( int i = 0; i < img.rows - windowHeight; ++i )
  {
    for ( int j = 0; j < img.cols - winddowWidth; ++j )
      {
        // either this
        cv::Mat currentWindow = img(cv::Range(j, i), cv::Range(j + windowWidth, i + windowHeight));
        // perform some operations on the currentWindow

        // or do this
        getRectSubPix(img, cv::Size(windowWidth, windowHeight), cv::Point2f(j, i), currentWindow));
        // perform some operations on the currentWindow
      }
  }
cv::Mat img;
int windowWidth=5;
内窗高度=5;
对于(int i=0;i

您可以阅读更多关于。

哪种编程语言?C++ C++?我想在C++中实现。我已经编辑了这个问题:2个外循环是什么实现的?结果只存储M=20,n=20。内部二个循环后有一个小代码。这个5×5块是通过图像运行的。这里NS=5。你知道如何在C++中实现循环<代码>的通用<代码>,只需要知道如何访问OpenCV中的一个像素,或者你完全没有C++的经验?在后一种情况下,在尝试将MATLAB代码转换为C++之前,你应该学习一些基本的C++。谢谢你的回答。我的目的是,我需要从每个图像中超出前5*5个块,然后执行一个操作。之后是下一个5*5像素,依此类推。