python opencv 截取矩形区域_在OpenCV中利用鼠标绘制矩形和截取图像的矩形区域

本文提供了两个Python OpenCV程序,演示如何通过鼠标操作在图像上绘制矩形并截取选中区域。第一个程序允许用户在图像上绘制矩形,第二个程序在此基础上增加了矩形区域的截取功能,将截取的图像保存为新的文件。
摘要由CSDN通过智能技术生成

这是两个相关的程序,前者是后者的基础。实际上前一个程序也是在前面博文的基础上做的修改,请参考《在OpenCV中利用鼠标绘制直线》 。下面贴出代码。

程序之一,在OpenCV中利用鼠标绘制矩形

#include "stdafx.h"

#include 

#include 

#include 

//#pragma comment( lib, "cv.lib" )

//#pragma comment( lib, "cxcore.lib" )

//#pragma comment( lib, "highgui.lib" )

#pragma comment(lib, "opencv_core247.lib" )

#pragma comment(lib, "opencv_core247d.lib" )

#pragma comment(lib, "opencv_highgui247.lib" )

#pragma comment(lib, "opencv_highgui247d.lib" )

IplImage* src = 0;

IplImage* dst = 0;

void on_mouse( int event, int x, int y, int flags, void* ustc)

{

static CvPoint pre_pt = {-1,-1};

static CvPoint cur_pt = {-1,-1};

CvFont font;

cvInitFont(&font, CV_FONT_HERSHEY_SIMPLEX, 0.5, 0.5, 0, 2, CV_AA);

char temp[16];

if( event == CV_EVENT_LBUTTONDOWN )

{                                                                                         cvCopy(dst,src);

sprintf(temp,"(%d,%d)",x,y);

pre_pt = cvPoint(x,y);

cvPutText(src,temp, pre_pt, &font, cvScalar(0,0, 0, 255));

cvCircle( src, pre_pt, 3,cvScalar(255,0,0,0) ,CV_FILLED, CV_AA, 0 );

cvShowImage( "src", src 

### 回答1: 使用PythonOpenCV可以很容易地截取矩形区域。首先,需要使用OpenCV读取图像文件。然后,使用OpenCV矩形函数来定义要截取区域。最后,使用OpenCV的裁剪函数来截取矩形区域。以下是示例代码: ```python import cv2 # 读取图像文件 img = cv2.imread('image.jpg') # 定义矩形区域 x, y, w, h = 100, 100, 200, 200 rect = (x, y, w, h) # 截取矩形区域 crop_img = img[y:y+h, x:x+w] # 显示截取后的图像 cv2.imshow('crop_img', crop_img) cv2.waitKey(0) cv2.destroyAllWindows() ``` 在上面的代码,我们首先使用`cv2.imread()`函数读取图像文件。然后,我们定义了一个矩形区域,其`x`和`y`是矩形左上角的坐标,`w`和`h`是矩形的宽度和高度。最后,我们使用`img[y:y+h, x:x+w]`来裁剪矩形区域,并使用`cv2.imshow()`函数显示截取后的图像。 ### 回答2: Python OpenCV是一个强大的计算机视觉库,可以处理图像、视频等多种形式的数据。截取矩形区域是一项常见的需求,在Python OpenCV实现也比较简单。 首先,需要导入OpenCV库和NumPy库: ```python import cv2 import numpy as np ``` 接着,加载图像并定义矩形区域的位置和大小: ```python # 读取图像 img = cv2.imread('image.jpg') # 定义矩形区域位置和大小 x, y, w, h = 100, 100, 200, 200 ``` 在这个例子,我们定义了一个200x200像素的矩形区域,其左上角坐标为(100,100)。 接下来,可以使用NumPy数组切片的方式来截取矩形区域: ```python # 截取矩形区域 roi = img[y:y+h, x:x+w] ``` 这条语句的作用是从img截取y到y+h行、x到x+w列的像素,形成一个新的数组roi。注意,数组的行列顺序与图像的坐标方向是相反的。 最后,可以将截取结果显示出来,或保存到文件: ```python # 显示截取结果 cv2.imshow('ROI', roi) cv2.waitKey(0) # 保存截取结果 cv2.imwrite('roi.jpg', roi) ``` 完整代码如下: ```python import cv2 import numpy as np # 读取图像 img = cv2.imread('image.jpg') # 定义矩形区域位置和大小 x, y, w, h = 100, 100, 200, 200 # 截取矩形区域 roi = img[y:y+h, x:x+w] # 显示截取结果 cv2.imshow('ROI', roi) cv2.waitKey(0) # 保存截取结果 cv2.imwrite('roi.jpg', roi) ``` 截取矩形区域Python OpenCV的一个基础操作,通过简单的数组切片即可实现。在实际应用,要根据具体需求灵活地调整矩形区域的位置和大小,并对截取结果进行进一步处理。 ### 回答3: PythonOpenCV是目前广泛使用的图像处理工具,其截取矩形区域也是常见的操作。下面我们来介绍一下如何使用PythonOpenCV截取矩形区域。 首先需要导入包,包括OpenCV和numpy。代码如下: ```python import cv2 import numpy as np ``` 接下来,读取需要处理的图片并进行灰度处理和边缘检测。代码如下: ```python img = cv2.imread('sample.jpg') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) edges = cv2.Canny(gray, 50, 150) ``` 灰度处理将图片转换为黑白灰度图像,方便进行边缘检测。Canny算法是一种常用的边缘检测算法,可以对图像进行优化和降噪。 接下来,我们需要找到要截取区域的四个顶点坐标。可以使用鼠标和可视化工具进行选取,也可以根据具体需求手动输入坐标点。这里我们手动输入,代码如下: ```python pts = np.array([[25,80],[25,180],[150,180],[150,80]], np.int32) ``` 接着,使用OpenCV的函数cv2.fillPoly将四个点连接成一个闭合图形,并显示出来。 ```python cv2.fillPoly(img, [pts], (255,255,255)) cv2.imshow('img', img) cv2.waitKey(0) ``` 最后,根据四个顶点坐标使用OpenCV提供的函数cv2.getRectSubPix截取矩形区域。代码如下: ```python rect = cv2.getRectSubPix(img, (125,100), (87.5,130)) ``` 这里getRectSubPix函数需要三个参数,第一个参数表示原图像,第二个参数表示要截取矩形大小,第三个参数表示矩形心点坐标。注意第二个参数和第三个参数的值要根据具体需求来调整。 最后,将截取到的矩形区域进行展示即可。 ```python cv2.imshow('rect', rect) cv2.waitKey(0) ``` 以上就是使用PythonOpenCV截取矩形区域的具体过程,需要注意的是各个步骤之间的耦合度较高,需要根据具体情况进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值