用小窗口循环扫描图像

来源:互联网 发布:网络彩票代理平台 编辑:程序博客网 时间:2024/05/22 03:14
#pragma once#include <opencv2/opencv.hpp>using namespace cv;typedef unsigned int uint;class WinSlide{public:WinSlide(Mat& src_img, Size win_size, Size win_stride = Size(1,1));bool read(Mat& win);private:Mat srcImg;//原图像Size winSize;//窗口大小Size winStride;//滑动步长,默认(1*1)uint x_count;//x轴计数uint y_count;//y轴计数Rect winRect;//窗口区域bool isEnd;//是否扫描完毕};
#include "WinSlide.h"WinSlide::WinSlide(Mat& src_img, Size win_size, Size win_stride){srcImg = src_img;winSize = win_size;winStride = win_stride;winRect = Rect(Point(0,0), win_size);//初始化窗口区域从左上顶点开始x_count = 0;y_count = 0;isEnd = false;}bool WinSlide::read(Mat& win){if (winRect.br() == Point(srcImg.cols, srcImg.rows))return isEnd;//扫描完毕//平移窗口,循环扫描winRect = Rect(Point(0,0), winSize) + Point(x_count, y_count);win = srcImg(winRect);//输出当前窗口区域的图像x_count += winStride.width;//水平平移计数if (winRect.br().x == srcImg.cols)//是否到达了图像右侧边界,准备换行{x_count = 0;//水平平移计数清零y_count += winStride.height;//垂直平移计数(换行)}return !isEnd;//没有扫描完毕}
//#include <Eigen/Dense>#include <opencv2/opencv.hpp>#include "WinSlide.h"using namespace cv;using namespace std;typedef unsigned int uint;int main(){Mat img = imread("E:\\Datasets\\Ball\\img0001.jpg");Mat imgROI;WinSlide win_slide(img, Size(3,3));while (win_slide.read(imgROI)){imshow("ROI", imgROI);waitKey(1);}return 0;}

0 0
原创粉丝点击