//自己写的代码,拖动鼠标截取一部分图像
#include <cvh>
#include <highguih>
bool drawing = false;
CvRect rect;
CvPoint origin;
IplImage src;
IplImage dst;
void onMouse(int event,int x,int y,int flags,void param = NULL);
int main(int argc, char argv[])
{
src = cvLoadImage("D:\\Lenajpg", -1);
cvNamedWindow("源",1);
cvSetMouseCallback("源",onMouse,NULL);//捕捉鼠标
cvShowImage("源",src);
cvWaitKey(0);
cvDestroyAllWindows();
cvReleaseImage(&src);
cvReleaseImage(&dst);
return 0;
}
//鼠标事件处理函数
void onMouse(int event,int x,int y,int flags,void param)
{
if(event == CV_EVENT_LBUTTONDOWN && !CV_EVENT_MOUSEMOVE)
{
drawing = true;
origin=cvPoint(x,y);
rect=cvRect(x,y,0,0);
}
else if(event==CV_EVENT_MOUSEMOVE)
{
if(drawing)
{
rectx=MIN(originx, x);
recty=MIN(originy,y);
rectheight = abs(originx-x);
rectwidth = abs(originy-y);
}
}
else if(event == CV_EVENT_LBUTTONUP )
{
drawing = false;
if(rectheight==0 || rectwidth==0)
{
cvDestroyWindow("截图");
return;
}
dst=cvCreateImage(cvSize(rectwidth,rectheight),src->depth,src->nChannels);
cvSetImageROI(src,rect);
cvCopy(src,dst);
cvResetImageROI(src);
cvNamedWindow("截图",1);
cvShowImage("截图",dst);
cvSaveImage("截图jpg",dst);
cvWaitKey(0);
cvDestroyWindow("截图");
}
}
通过resize重置尺寸
参数:,输出尺寸(一般我不用这个,我传None),宽的比例,高的比例
例子:将img,缩小一半显示,那么宽高为原尺寸的05倍
img = cv2resize(img,None,fx=05,fy=05)
设置完尺寸后再显示
cv2imshow('img',img)
cv2waitKey(0)
希望我的回答对你有帮助!
Mat类:
是用于保存图像以及其他矩阵数据的数据结构。
图像载入函数imread():
Mat imread(const string& filename, int flags=1);
filename表示图像载入的路径;
flags为载入标识。
flags=0 将图像转换为灰度再返回;
flags=1 将图像转换成彩色再返回;
flags=2 若载入图像的深度是16位或者32位,就返回对应的图像深度,否则,将图像转换为8位图像再返回。
flags=2|4 载入最真实无损的源图像
若flags不在枚举类型当中,flags>0 返回一个三通道的彩色图像;flags=0 返回灰度图像;flags<0 返回包含Alpha通道的加载图像。
图像显示函数imshow():
void imshow(const string& winname, InputArray mat);
winname填写要显示的窗口标识名称;
mat填需要显示的图像。
输出图像到文件imwrite():
bool imwrite(const string& filename, InputArray img, const vector& params=vector());
第一个参数filename表示要写入的文件名
第二个参数img表示Mat类型的图像数据
通道分离split()函数;
void split(const Mat& src, Mat mvbegin);
void split(InputArray m, OutputArrayofArray mv);
第一个参数表示需要进行分离的多通道数组;
第二个参数表示函数 输出数组或输出的vector容器。
通道合并merge()函数:
void merge(const Mat mv, size_t count, OutputArray dst)
void merge(InputArrayOfArray mv, OutputArray dst);
第一个参数mv表示需要被合并的输入矩阵或vector容器的阵列,mv参数中所有矩阵必须拥有一样的尺寸;
第二个参数count表示当mv为空白的C数组时,代表输入矩阵的个数,通常可以省略不写;
第三个参数dst表示输出矩阵,和mv拥有一样的尺寸和深度
Python与OpenCV图像简单 *** 作
文章目录
OpenCV安装
1读取
2保存
3截取部分图像
4翻转
5缩放
6转换为灰度图像
7在一个窗口中显示两张
8绘图功能
OpenCV安装
打开命令行输入 pip install opencv-python(前提是有python环境)
1读取
使用 cv2imread() 函数,给出了几种读取路径的写法
import cv2#导入opencv包
#python中不需要声明变量
img1 = cv2imread("D:/test/1jpg")#绝对路径,推荐
img2 = cv2imread("D:\\test\\2jpg")#通常是两个斜线,单右斜线会被当成转义符
img3 = cv2imread("3jpeg")#相对路径,将放在py文件对应目录下
cv2imshow("test1", img1)
cv2imshow("test2", img2)
cv2imshow("test3", img3)
cv2waitKey(0)#没有这一句会一闪而过
##waitkey(delay=0),等待用户输入按键,返回该按键的值
2保存
使用 cv2write() 函数保存
import cv2# 导入OpenCV包
img=cv2imread("D:/test/3png",cv2IMREAD_COLOR)
cv2imshow("test",img)#OpenCV可以实现不同格式转换,支持jpg、bmp、png等格式相互无损转换
cv2imwrite("D:/test/31png",img)#将改变后的图像保存
cv2imwrite("D:/test/32bmp",img)
cv2waitKey(0)
3截取部分图像
import cv2
img = cv2imread("D:\\test\\2jpg")
frame = img[200:400,200:400] #截取部分图像,200-400行,200-400列
cv2imshow("test",frame)#显示截取后的图像
cv2waitKey(0)
4翻转
使用cv2flip(img,flipcode)来进行翻转
flipcode控制翻转方向
import cv2
img=cv2imread("D:/test/5jpg",cv2IMREAD_COLOR)
flipCode1=1#大于0左右翻转
flipCode2=0#等于0上下翻转
flipCode3=-1#小于0先上下翻转再左右翻转
img1 = cv2flip(img, flipCode1)#filpCode控制翻转方向
img2 = cv2flip(img, flipCode2)
img3 = cv2flip(img, flipCode3)
cv2imshow("test",img)
cv2imshow("test1",img1)
cv2imshow("test2",img2)
cv2imshow("test3",img3)
cv2waitKey(0)
5缩放
cv2resize(img,dsize,fx,fy),dsize和fx,fy都可以设置大小,不能同时为0
import cv2# 导入OpenCV包
img = cv2imread("D:/test/2jpg",cv2IMREAD_COLOR)
img1 = cv2resize(img, (700, 700))#设置输出的尺寸
img2 = cv2resize(img, None, fx=07, fy=07)#None的位置本来是输出的尺寸,这里设置了缩放因子
#fx-水平轴上的比例因子,fy-垂直轴上的比例因子
cv2imshow("test", img)
cv2imshow("test1", img1)
cv2imshow("test2", img2)
cv2imwrite("D:/test/resizejpg", img1)# 保存图像
cv2waitKey(0)
6转换为灰度图像
cv2cvtColor(img, cv2COLOR_RGB2GRAY)
cv2COLOR_RGB2GRAY表示把RGB图像转为灰度图像,2前是转换前,2后是转换后
import cv2#导入opencv包
#python中不需要声明变量
img = cv2imread("D:/test/1jpg")#cv2imread读进来的格式是BGR(W,H,C),而不是RGB
cv2imshow("BGR", img)
#将图像转换为RGB格式
img1 = cv2cvtColor(img, cv2COLOR_BGR2RGB)#因为opencv读取是按BGR读的,所以转换为RGB反而不像原图
cv2imshow("RGB",img1)
#将图像转换为灰度图像
img2 = cv2cvtColor(img1, cv2COLOR_RGB2GRAY)
cv2imshow("GRAY",img2)
cv2waitKey(0)
7在一个窗口中显示两张
import cv2
import numpy as np
img = cv2imread("D:/test/resizejpg")
img2 = cv2imread("D:/test/resizejpg")
#imgs = nphstack([img,img2])#在水平方向上平铺
imgs = npvstack([img,img2])#在竖直方向上堆叠
cv2imshow("mutil_pic", imgs)
cv2waitKey(0)
8绘图功能
import cv2
import numpy as np
img = 255npones((350,512,3),npuint8)#unit8:0~255
#ones()为创建一个元素均为一的矩阵
font = cv2FONT_HERSHEY_DUPLEX
#font = cv2FONT_HERSHEY_COMPLEX# 设置字体
#文本 # 对象、文本、 位置、 字体、字体大小、颜色、 字体粗细
cv2putText(img, "happy day", (50,300), font, 08, (25, 25, 25), 2,)#颜色可以自己调整,范围为0-255
#线 #起点 终点 颜色 粗细
cv2line(img, (50,310), (185,310), (0, 0,0),4)
#矩形 #左上顶点 右下顶点
cv2rectangle(img, (80,8), (200,100), (0, 255,0),2)
#圆形 #圆心 半径 颜色 控制是否填充 -1表示填充
cv2circle(img,(60,60),30,(0,0,213),1)
#椭圆 #中心点 长轴 短轴 偏转角度,起始角度,终止角度
cv2ellipse(img,(100,300),(100,50),180,0,360,(20,213,79),1)
cv2imshow("Draw", img)
cv2waitKey(0)
1npvstack([img1,img2]) 当img1和img2矩阵维度相同时才能堆叠
2除了imread,imwrite 函数没有返回值以外,flip,resize,cvtColor,vstack,hstack都有返回一个回来。
以上就是关于2021-02-08 Python OpenCV GaussianBlur()函数全部的内容,包括:2021-02-08 Python OpenCV GaussianBlur()函数、opencv常用函数、opencv如何在显示的窗口中用鼠标提取一块区域等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)