快速框选图像的某一区域并进行缩放展示
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速框选图像的某一区域并进行缩放展示相关的知识,希望对你有一定的参考价值。
参考技术A 在进行论文结果展示时,通常需要将图像的某一区域进行框选,然后对这个区域进行放大展示,如下图:为了更方便的对多张图像的同一位置进行选择,本文制作了一个很简陋的脚本。
在使用软件前,将需要在同一位置进行标记的图像放在文件夹中,然后利用软件交互,只需对一张图像进行框选,便可以完成对该文件夹下所有图像的框选。
python3,opencv-python,pyqt5
(1)双击 “运行.bat” 运行脚本。
(2)点击文件夹选择文件夹的路径(注意不要使用中文路径),软件路径如下:
(3)如果需要更改参数,进行参数的输入,否则,点击开始运行。
(4)在弹出的图像单击鼠标进行画框,鼠标所选位置为框的左上角顶点的坐标,框的大小以及框要放大的大小由上面的参数决定。
(5)在确认无误后,点击键盘上的“ESC”按键,脚本将会对选定文件夹下的所有的图像进行处理,处理的结果保存在脚本所在路径的results_box文件夹下。
github: https://github.com/dehazenet/draw_BOX
脚本制作十分粗糙,欢迎各位进行优化~
opencv-鼠标框选矩形区域并输出尺寸
全部代码
#include<opencv2\\opencv.hpp>
#include <stdio.h>
using namespace cv;
using namespace std;
Mat org, dst, img, tmp;
void on_mouse(int event, int x, int y, int flags, void *)
static Point pre_pt = (0, 0);
static Point cur_pt = (0, 0);
if (event == EVENT_LBUTTONDOWN)
pre_pt = Point(x, y);
else if (event == EVENT_MOUSEMOVE && flags)//摁下左键,flags为1
org.copyTo(tmp);
cur_pt = Point(x, y);
circle(tmp, cur_pt, 4, Scalar(0, 255, 0, 0), 2, 8);
rectangle(tmp, pre_pt, cur_pt, Scalar(0, 255, 0, 0), 1, 8, 0);
imshow("img", tmp);//画的时候显示框
else if (event == EVENT_LBUTTONUP)
org.copyTo(img);
rectangle(img, pre_pt, cur_pt, Scalar(0, 255, 0, 0), 1, 8, 0);
imshow("img", img);//画完后显示框
int width = abs(pre_pt.x - cur_pt.x);
int height = abs(pre_pt.y - cur_pt.y);
dst = org(Rect(min(cur_pt.x, pre_pt.x), min(cur_pt.y, pre_pt.y), width, height));
cout << "x=" << pre_pt.x << "y=" << pre_pt.y << "width=" << width << "height=" << height << endl;
namedWindow("dst");
imshow("dst", dst);
int main()
org = imread("D:/images/111.jpg");
org.copyTo(img);
namedWindow("img");
imshow("img", img);
setMouseCallback("img", on_mouse, 0);
/* waitKey();
cvtColor(dst, dst, CV_BGR2GRAY);
imshow("gray", dst);*/
waitKey(0);
以上是关于快速框选图像的某一区域并进行缩放展示的主要内容,如果未能解决你的问题,请参考以下文章