用roi在同一幅图像上显示两个图像

#include<iostream>
#include<vector>
#include<opencv2/imgproc/imgproc.hpp>
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<string>
#include"imgshow.h"
using namespace std;
using namespace cv;
void showimg(string& name, vector<Mat>& img)
{
	int nimg = (int)img.size();
	Mat disimg;
	Mat shiyan = img[0];
	disimg.create(Size(640,240), CV_8UC3);
	 Mat imgroi = disimg(Rect(0, 0, 320, 240));
	 resize(img[0], imgroi, imgroi.size());
	 Mat imgroi1 = disimg(Rect(320,0, 320, 240));
		resize(img[1], imgroi1, imgroi1.size());
	namedWindow(name);
	imshow(name, disimg);
	
	
}

以下是一个示例代码,可以实现鼠标单击采集样本的功能,同时对于两个相同区域,可以将其保存并设置为相同类别: ```python import cv2 # 定义全局变量 selected_regions = [] current_class = 0 # 鼠标单击回调函数 def mouse_callback(event, x, y, flags, params): global selected_regions, current_class # 左键单击,选择区域 if event == cv2.EVENT_LBUTTONDOWN: roi = cv2.selectROI(params["image"]) if roi[2] > 0 and roi[3] > 0: selected_regions.append((roi, current_class)) cv2.rectangle(params["image"], (roi[0], roi[1]), (roi[0] + roi[2], roi[1] + roi[3]), (0, 255, 0), 2) # 右键单击,切换类别 if event == cv2.EVENT_RBUTTONDOWN: current_class = (current_class + 1) % 2 # 加载图像 image1 = cv2.imread("image1.png") image2 = cv2.imread("image2.png") # 显示图像 cv2.imshow("image1", image1) cv2.imshow("image2", image2) # 设置回调函数 cv2.setMouseCallback("image1", mouse_callback, {"image": image1}) cv2.setMouseCallback("image2", mouse_callback, {"image": image2}) # 按下 Esc 键退出程序 while True: key = cv2.waitKey(1) & 0xFF if key == 27: break # 保存选中的区域 for i, (roi, class_id) in enumerate(selected_regions): x, y, w, h = roi crop = image1[y:y+h, x:x+w] cv2.imwrite(f"{class_id}_{i}_image1.png", crop) crop = image2[y:y+h, x:x+w] cv2.imwrite(f"{class_id}_{i}_image2.png", crop) # 释放窗口 cv2.destroyAllWindows() ``` 这个代码使用 `cv2.selectROI()` 函数来选择感兴趣的区域,同时利用一个列表 `selected_regions` 来保存选中的区域。在每次单击鼠标时,会检查当前的类别(0 或 1),并将当前选中的区域与类别一起保存到列表中。可以利用 `cv2.rectangle()` 函数在图像上绘制矩形框来表示已选中的区域。 最后,在程序退出时,会将选中的区域分别从两个图像中裁剪出来,并保存为两个不同的文件。可以根据需要修改保存的文件名和路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值