起因:最近对图片进行截取矩形区域操作时,发现了opencv一个很蛋痛的地方,使用imshow()函数展示图片的时候,一旦图片的分辨率过高,就不能完全显示。要是调整参数为WINDOWSIZE_NORMAL的话,截取出来的矩形区域和原图并不是一一对应的。使用resize函数的话,先缩小在放大又会使图片变得异常模糊。只好上网查了一下给图片加上滑动条的文章,然而只找到了opecv2写的函数,现用opencv4重写如下。
目的:给分辨率过大的图片加上滑动条。
原理:截取原图中符合窗口大小的部分并在窗口中显示
代码:
#include<opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;
int h_x=0, v_y=0,d_x=0,d_y=0; //记录滑动条变化值,以及保存当前值
Rect v_bar, h_bar;
Point start; //移动鼠标时的基点,使用了全局变量以使得滑动条的位置可以被记录下来。也可设为局部的静态变量
bool x_change = false;
bool y_change = false; //判断是否改变
void on_mouse(int event, int x, int y, int flags, void* param);
void draw_scrolls(Mat src_img, const char* title, int width = 500, int height = 700); //后两个参数设置窗口的默认大小
int main()
{
const char* title = "source";
Mat srcimg = imread("E:\\material\\shaoyun.jpg");
namedWindow(title, 1);
setMouseCallback(title, on_mouse);
while (true)
{
char c = waitKey(10);
draw_scrolls(srcimg,title);
if (c == ' ')

针对高分辨率图片无法完全显示的问题,通过添加滑动条实现了对大尺寸图片的完整查看与操作,确保图片截取区域与原图精确对应。
最低0.47元/天 解锁文章
1649

被折叠的 条评论
为什么被折叠?



