用opencv截图

本文介绍了如何利用OpenCV编写一款截图工具,该工具通过鼠标选取初步区域,并使用键盘的a/s/d/w进行精确调整,1/2/3/5实现缩放,使用Enter保存,Esc退出。相比Windows自带的截图工具,它提供了更灵活的操作方式。

以前截图都用windows自带的画图工具,由于只能用鼠标控制所选区域,当需要精确截图时非常麻烦。今天突发奇想,用opencv写一个截图工具,却意想不到的好用。其代码如下:

#include<opencv/cv.h>
#include<opencv/highgui.h>
#include<iostream>

CvPoint pt1 = cvPoint(0,0);
CvPoint pt2 = cvPoint(0,0);
bool is_selecting = false;

// callback function
void cvMouseCallback(int mouseEvent,int x,int y,int flags,void* param)
{
	switch(mouseEvent)
	{
	case CV_EVENT_LBUTTONDOWN:
		pt1 = cvPoint(x,y);
		pt2 = cvPoint(x,y);
		is_selecting = true;
		break;
	case CV_EVENT_MOUSEMOVE:
		if(is_selecting)
			pt2 = cvPoint(x,y);
		break;
	case CV_EVENT_LBUTTONUP:
		pt2 = cvPoint(x,y);
		is_selecting = false;
		break;
	}
	return;
}

int main(int argc,char* argv[])
{
	char img_path[80] = "0.jpg";
	char save_path[80] = "save.jpg";
	char* window = "img";

	IplImage* img = cvLoadImage(img_path);  
	IplImage* img_show = cvCloneImage(img);

	cvNamedWindow(window,CV_WINDOW_AUTOSIZE);
	cvSetMouseCallback(window,cvMouseCallback);

	bool 
### 回答1: 可以使用下面的代码示例来实现Android使用OpenCV截屏:// 获取屏幕 Bitmap bmp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);// 创建OpenCV对象 Mat mat = new Mat(height, width, CvType.CV_8UC4);// 将屏幕图像转换为Mat Utils.bitmapToMat(bmp, mat);// 将Mat保存为图片文件 Imgcodecs.imwrite("screenshot.png", mat); ### 回答2: 使用安卓平台进行屏幕截图的代码示例如下: 首先,需要准备好OpenCV库文件,并在项目中引入OpenCV库。在项目的build.gradle文件中添加以下代码: ```groovy implementation project(':opencv') ``` 然后,创建一个Activity,并在布局文件中添加一个按钮用于触发截屏操作。在Activity的Java文件中添加以下代码: ```java import org.opencv.android.Utils; import org.opencv.core.CvType; import org.opencv.core.Mat; import org.opencv.core.MatOfByte; import android.graphics.Bitmap; import android.os.Bundle; import android.view.View; import android.view.WindowManager; import android.widget.Button; public class MainActivity extends AppCompatActivity { private Button screenshotButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); screenshotButton = findViewById(R.id.screenshot_button); screenshotButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 截取屏幕并转化为OpenCV的Mat对象 View rootView = getWindow().getDecorView().getRootView(); rootView.setDrawingCacheEnabled(true); Bitmap screenshotBitmap = Bitmap.createBitmap(rootView.getDrawingCache()); rootView.setDrawingCacheEnabled(false); Mat screenshotMat = new Mat(screenshotBitmap.getHeight(), screenshotBitmap.getWidth(), CvType.CV_8UC3); Utils.bitmapToMat(screenshotBitmap, screenshotMat); // 将Mat对象转化为字节数组 MatOfByte screenshotBytes = new MatOfByte(); Imgcodecs.imencode(".png", screenshotMat, screenshotBytes); // 可以在这里对screenshotBytes进行进一步处理,如保存到文件或进行图像处理等 // 释放Mat对象 screenshotMat.release(); } }); } } ``` 以上代码使用OpenCV的Utils类将Android的Bitmap对象转化为OpenCV的Mat对象,并使用Imgcodecs类将Mat对象转化为字节数组。在点击截屏按钮后,屏幕会被截取,并将截取的图像以字节数组的形式保存在`screenshotBytes`中。你可以根据自己的需求,对`screenshotBytes`进行进一步的处理,例如保存为文件或进行图像处理等。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值