假设我有一个图像,并且我想提取一个子图像,假设原始图像被包裹成环形。
我的猜测是做
之类的事情#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/opencv.hpp>
#include <iostream>
#include <cstdio>
#include <vector>
#include <Windows.h>
using namespace cv;
using namespace std;
int main(int argc, char **argv) {
Mat image = imread("image.jpg", CV_LOAD_IMAGE_GRAYSCALE);
const int & rows = image.rows;
const int & cols = image.cols;
Rect roi = Rect(rows - 1, cols - 1, 51, 51);
Mat subImage = image(roi);
namedWindow("Window", CV_WINDOW_AUTOSIZE);
imshow("Window", subImage);
waitKey(0);
return 0;
}
但那并没有奏效。有什么可以建议的吗?也许我有一个我可以使用的功能?
如果不是最简单的方式?
答案 0 :(得分:0)
负值不起作用,因为显然所讨论的库不支持类环形图像处理......
我现在为您看到两个选项:
对于后者:
int cx = 0, cy = 0;
for(int y = lowerBoundY; y < upperBoundY; ++y)
{
for(int x = lowerBoundX; x < upperBoundX; ++x)
{
subImage[cy][cx++] = image[(y + height) % height][(x + width) % width];
}
++cy;
cx = 0;
}
(默默地假设你没有超过[-width;2*width)
和[-height;2*height)
的间隔......)
答案 1 :(得分:0)
尝试openCV copyMakeBorder
;它提取子图像,为边框处理提供多种选择。