创建一个窗口#zeros(shape,dtype=float,order='C')
#shape:形状,dtype:数据类型,可选参数,默认numpy.float64img = np.zeros((500,500,3),np.uint8)

读取图片:

img=cv.imread('图片路径',flag);——彩色一般都是原图

flag=-1时,8位深度,原通道——原图

flag=0,8位深度,1通道——黑白

flag=1,   8位深度  ,3通道(彩色)

flag=2,原深度,1通道——黑白

flag=3,  原深度,3通道(彩色)

flag=4,8位深度 ,3通道(彩色)

获取音频文件:

cap = cv2.VideoCapture("2.avi")

新建窗口:cv.nameWindow();的方法

void nameWindow(const string& winname,int flags = WINDOW_AUTOSIZE) ;

参数1:新建的窗口的名称。自己随便取。

参数2:窗口的标识,一般默认为WINDOW_AUTOSIZE 。

WINDOW_AUTOSIZE 窗口大小自动适应图片大小,并且不可手动更改。(上面图1就是使用的它)

WINDOW_NORMAL 用户可以改变这个窗口大小(上面图2就是使用的它)

WINDOW_OPENGL 窗口创建的时候会支持OpenGL
滑动控件的创建:

cv2.createTrackbar('Weighted','Combine',50,100,OnAddWeighted)

参数一、trackbarname:滑动空间的名称;

参数二、winname:滑动空间用于依附的图像窗口的名称(一般是nameWindow的名称);

参数三、value:初始化阈值;

参数四、count:滑动控件的刻度范围;

参数五、TrackbarCallback是回调函数

按位(bitwise)运算及模板(mask)理解:

举个与运算 例子(and):#相与,如果mask模板是255则为255,否者为原色。通俗理解:若模板为黑色,则该部分为黑,否则为参考图的颜色。

图片对比度转换:

gray_img = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)#转为灰度图 0则正常
gray_img = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)#转到HSV空间

写入字体#设置字体类型:

FONT_HERSHEY_SIMPLEX,FONT_HERSHEY_PLAIN,FONT_HERSHEY_DUPLEX
font1 = cv2.FONT_HERSHEY_SIMPLEX
font2 = cv2.FONT_HERSHEY_PLAIN
font3 = cv2.FONT_HERSHEY_DUPLEX
#背景图片,待写入的字,第一个字符左下角坐标,字体类型,字体大小,字体颜色,字体粗细
cv2.putText(img,'OpenCV',(20,100),font1,2,(255,0,0),5)
直线
#背景图,起点左边,终点坐标,线条颜色,线条宽度,[线条类型]
##线条类型:默认是8-connected样式,anti-aliased线条,cv2.LINE_AA表示反锯齿线条,曲线视觉效果更佳

cv2.line(img,(0,0),(300,300),(0,255,0),3)


#背景图,圆心位置,圆半径,圆颜色,[圆粗细,圆边界类型]

cv2.circle(img,(200,200),30,(0,0,255))

椭圆
#背景图,中心坐标,长短轴,顺时针旋转角度,顺时针起始角度,终止角度,线条颜色,线条粗细,[线条类型]

cv2.ellipse(img,(200,200),(170,130),0,0,360,(255,0,0),3)

矩形框

#背景图片,左上角,右下角,BGR,矩形框边框厚度,[边缘折线类型]
cv2.rectangle(img,(10,10),(200,200),(0,255,0),-1, cv2.LINE_AA)

绘制多边形

#将数组转化为矩阵
#数组,[数据类型]
pts = np.array([[50,50],[250,50],[250,250],[50,250]],np.int32)

多边形边框

#背景图片,顶点集合,是否是闭合折线,折线颜色,折线粗细,[折线类型]
cv2.polylines(img,[pts],True,(255,0,0),6,cv2.LINE_AA)

多边形内填充

#背景图片,顶点集合,填充颜色,[边缘折线类型]
cv2.fillPoly(img,[pts],(0,255,0),cv2.LINE_AA)

鼠标事件回调函数(鼠标响应函数)void 函数名(int event,int X,int Y,int flags,void* param)
#鼠标事件类型,X和Y为事件发生时鼠标坐标,按下鼠标的哪个键,指向任意对象的指针void screenShot(event,x,y,flags,param)
处理鼠标动作函数 void setMousecallback(winname,onMouse, [void* userdata=0])
#窗口名,鼠标响应函数,传给回调函数的参数cv2.setMousecallback("窗口名",鼠标相应函数名)
鼠标事件类型
EVENT_MOUSEMOVE              滑动EVENT_LBUTTONDOWN          左键点击
EVENT_RBUTTONDOWN          右键点击
EVENT_MBUTTONDOWN          中键点击
EVENT_LBUTTONUP                 左键放开
EVENT_RBUTTONUP                 右键放开
EVENT_MBUTTONUP                 中键放开
EVENT_LBUTTONDBLCLK          左键双击
EVENT_RBUTTONDBLCLK         右键双击
EVENT_MBUTTONDBLCLK         中键双击

在图上画图形(或者截图):

# -*- coding: cp936 -*-
import cv2
import numpy as np flag = False
x1=y1=0 ##Alt+3
def screenShot(event,x,y,flags,param):
global x1,y1,flag,img,temp
if event==cv2.EVENT_LBUTTONDOWN: #鼠标左键按下
flag = True #表示当前鼠标左键是按下的
x1 = x
y1 = y
elif event==cv2.EVENT_MOUSEMOVE: #鼠标移动
#鼠标移动的时候一直运行下面这个,所以会保留最后一次画的圆
if(flag):
img = temp.copy()#调用temp中的图
#cv2.rectangle(img,(x1,y1),(x,y),(0,255,0),2)
cv2.circle(img,((x1+x)//2,(y1+y)//2),abs((x-x1)//2),(0,0,255),2)
'''
cvCircle(CvArr* img, CvPoint center, int radius, CvScalar color, int thickness=1,
int lineType=8, int shift=0)
img为源图像指针
center为画圆的圆心坐标
radius为圆的半径
color为设定圆的颜色,规则根据B(蓝)G(绿)R(红)
thickness 如果是正数,表示组成圆的线条的粗细程度。否则,-1表示圆是否被填充
line_type 线条的类型。默认是8
shift 圆心坐标点和半径值的小数点位数
'''
elif event==cv2.EVENT_LBUTTONUP: #鼠标左键弹起
flag = False #弹起使画圆结束
temp = img.copy()#画完的图保存到temp中
#ROI = temp[y1:y,x1:x] #---y1:y2, x1:x2
#cv2.imshow('ROI',ROI)
#cv2.imwrite('ROI.bmp',ROI)
# cv2.rectangle(img,(x1,y1),(x,y),(0,255,0),2) img=cv2.imread('1.jpg') #读取图像 temp = img.copy() #备份img图 cv2.namedWindow('screenShot1')#生成的窗口名 #鼠标操作信息回调函数
cv2.setMouseCallback('screenShot1',screenShot)#将screenShot画圆函数回调到窗口中 while(1):
cv2.imshow('screenShot1',img)#将图片展现窗口
if cv2.waitKey(1)&0xFF==27: #Esc按下退出
break
cv2.destroyAllWindows()

实现雪花效果:

# -*- coding: cp936 -*-
import cv2
import numpy as np
import random #随机数模块
img=cv2.imread('1.jpg') #读取图像 #print img.shape
#实现雪花效果
for num in range(0,300): #控制雪花点个数
i = random.randint(0,img.shape[0])%img.shape[0]
j = random.randint(0,img.shape[1])%img.shape[1]
#img[i,j] = [0, 0, 255]
cv2.circle(img,(j,i),2,(255,255,255),-1) cv2.imshow('src',img)
cv2.imwrite('snow.jpg',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

分解视频:

# -*- coding: utf-8 -*-

import cv2

cap = cv2.VideoCapture("2.avi")

flag = 0

if(cap.isOpened()): #视频打开成功
flag = 1
else:
flag = 0
#print "read error!"
i=0
imgPath = "" if(flag==1):
while(True):
ret,frame = cap.read()#读取一帧
#if(frame is None):
if ret==False: #读取帧失败
break
#gray_img = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)#转为灰度图 0则正常
#gray_img = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)#转到HSV空间
i=i+1
imgPath = "D:\\pic\\"+str(i)+".bmp"
cv2.imshow("frame", frame)
#cv2.imwrite(imgPath,frame)#截取的帧写入路径文件
if cv2.waitKey(50)&0xFF ==27: #按下Esc键退出
#cv2.imwrite("1.bmp",frame)
break cap.release()
cv2.destroyAllWindows()

 自定义颜色条:

# -*- coding: cp936 -*-
import cv2
import numpy as np def nothing(x):
pass
img=np.zeros((300,512,3),np.uint8)
cv2.namedWindow('image')
cv2.createTrackbar('R','image',0,255,nothing)
cv2.createTrackbar('G','image',0,255,nothing)
cv2.createTrackbar('B','image',0,255,nothing)
switch='0:OFF\n1:ON'
cv2.createTrackbar(switch,'image',0,1,nothing) while(1):
cv2.imshow('image',img)
k=cv2.waitKey(1)&0xFF
if k==27:
break
r=cv2.getTrackbarPos('R','image')
g=cv2.getTrackbarPos('G','image')
b=cv2.getTrackbarPos('B','image')
s=cv2.getTrackbarPos(switch,'image')
if s==0:
img[:]=0
else:
img[:]=[b,g,r]#OpenCV存储颜色顺序是BGR
cv2.destroyAllWindows()

图片重叠度:

# -*- coding: cp936 -*-
import cv2
import numpy as np def OnAddWeighted(weightValue):#图像混合
global img,img2,dst #全局变量
dst = cv2.addWeighted(img1,float(weightValue)/100,img2,float(100-weightValue)/100,0)#按权重混合叠加
img1 = cv2.imread('1.jpg') #加载第一张图片
img2 = cv2.imread('2.jpg') #加载第二张图片
dst = np.zeros(img1.shape,np.uint8) #结果图像定义
##
cv2.namedWindow('Combine')
cv2.createTrackbar('Weighted','Combine',50,100,OnAddWeighted)
OnAddWeighted(50) #初始调用 while(1):
cv2.imshow('Combine',dst)#显示结果图
k=cv2.waitKey(1)&0xFF
if k==27:
break cv2.destroyAllWindows()

实现图片重叠(涉及图片【bitwise】按位计算):

# -*- coding: cp936 -*-
import numpy as np
import cv2
#获取car图并且放在src幕布上
img = cv2.imread('1 (1).jpg')
cv2.imshow('src',img) #获取logo图并且放在src幕布上
logo1 = cv2.imread('3.png')
logo = cv2.resize(logo1,(200,200))#--将图片改为200x200大小
cv2.imshow('logo',logo) w = logo.shape[1] #--logo宽度 h = logo.shape[0] #--logo高度 gray = cv2.cvtColor(logo,cv2.COLOR_BGR2GRAY)#logo转为灰度图 cv2.imshow('gray',gray) #显示灰度图 ret, mask1 = cv2.threshold(gray, 175, 255, cv2.THRESH_BINARY_INV)#将gray二值化,转成黑白图 cv2.imshow('mask', mask1)
#相与,如果mask模板是255则为255,否者为原色。 logo_temp = cv2.bitwise_and(logo, logo, mask=mask1) #将logo和mask 相与 cv2.imshow('logo_temp',logo_temp) roi = img[0:h,0:w] #---y1:y2,x1:x2 mask1_inv = cv2.bitwise_not(mask1)#翻转,白变黑,黑变白 cv2.imshow('mask2',mask1_inv) roi_temp = cv2.bitwise_and(roi, roi, mask=mask1_inv)#将mask2和原图roi区间 相与 cv2.imshow('roi_temp',roi_temp) dst = cv2.add(logo_temp, roi_temp)#
cv2.imshow('result',dst)
print(dst) img[0:h,0:w] = dst cv2.imshow('result',img) cv2.waitKey(0)
cv2.destroyAllWindows()

bitwise

OpenCV随笔的更多相关文章

  1. opencv随笔1

    图像处理技术一般包括图像压缩,增强和复原,匹配 描述和l识别 3 个部分. 图像处理一般指数字图像处理 ( Digitallmage Processing). 其中,数字图像是指用工业相机.摄像机.扫 ...

  2. 转载OPENCV学习随笔

    转载自 亦轩Dhc http://www.cnblogs.com/daihengchen/p/5492729.html 学习笔记:使用opencv做双目测距(相机标定+立体匹配+测距).   最近在做 ...

  3. OpenCV人脸识别Eigen算法源码分析

    1 理论基础 学习Eigen人脸识别算法需要了解一下它用到的几个理论基础,现总结如下: 1.1 协方差矩阵 首先需要了解一下公式: 共公式可以看出:均值描述的是样本集合的平均值,而标准差描述的则是样本 ...

  4. opencv的一次性配置

    最近做自然场景中的文字识别,想尝试些图像处理方法,感觉每一种方法都需要自己写很麻烦,自然就想到了强大的开源的跨平台计算机视觉库OpenCv.我用的是opencv2.4.9版本,VS用的是2010,他们 ...

  5. opencv中stitching_detail的运行

    这个拼图并非自带的直接使用sources中的代码.而是把必要的内容放到工程中,改造成自己的图像拼接.参考博文:http://www.tuicool.com/articles/fMbUfaF 该篇博文总 ...

  6. opencv视频播放

    在一个界面上显示一张图片.是一件非常easy的事情,但说到要显示视频.刚開始学习的人可能不知道怎么处理,事实上,一般来说能够理解为视频就是图片以人眼察觉不到的速度高速更新. 曾经用摄像头採集视频显示在 ...

  7. Python学习--使用dlib、opencv进行人脸检测标注

    参考自https://www.pyimagesearch.com/2017/04/03/facial-landmarks-dlib-opencv-python/ 在原有基础上有一部分的修改(image ...

  8. Android开发:Eclipse+OpenCV环境搭建

    一.OpenCV预备: OpenCV是一个跨平台计算机视觉库,可以运行在Linux.Windows.Android和Mac OS操作系统上.它由一系列 C 函数和少量 C++ 类构成,同时提供了Pyt ...

  9. python中使用Opencv进行人脸检测

    这两天学习了人脸识别,看了学长写的代码,边看边码边理解搞完了一边,再又是自己靠着理解和记忆硬码了一边,感觉还是很生疏,就只能来写个随笔加深一下印象了. 关于人脸识别,首先需要了解的是级联分类器Casc ...

随机推荐

  1. 快速上手NumPy

      NumPy is the fundamental package for scientific computing in Python. NumPy是一个开源的Python科学计算库. 官网:ht ...

  2. 面向对象编程OOP

    这节讲一下,什么是面向对象(Object Oriented Programming).说面向对象之前,我们不得不提的是面向过程(Process Oriented Programming),C语言就是面 ...

  3. C++ scanf_s()函数的用法以及注意事项

    前身--scanf() 有的教材里用的scanf(),其实在目前Visual Studio版本中已经弃用了,用scanf_s()函数代替了. 为什么现在要用scanf_s() scanf_s()函数是 ...

  4. 初识ClickHouse——安装与入门

    前言: 久闻 ClickHouse 大名,一直没有去详细了解.近期看了下 ClickHouse 相关文档,决定安装体验下.想了解 ClickHouse 的小伙伴可以一起跟着学习哦.本篇文章主要介绍 C ...

  5. Kafka万亿级消息实战

    一.Kafka应用 本文主要总结当Kafka集群流量达到 万亿级记录/天或者十万亿级记录/天  甚至更高后,我们需要具备哪些能力才能保障集群高可用.高可靠.高性能.高吞吐.安全的运行. 这里总结内容主 ...

  6. 03.28,周六,12:00-17:00,ICPC训练联盟周赛,选用试题:UCF Local Programming Contest 2016正式赛。

    A. Majestic 10 题意:三个数均大于10则输出"triple-double",如果两个数大于10则输出"double-double",如果一个大于1 ...

  7. win10 下安卓源码同步小技巧

    win10下,通过 清华镜像源 AOSP 可以快速拿到 100G 的 .repo  备份 然后 用 repo sync 就可以得到 安卓源码,爽不爽! 下载到win10 e盘下,用powershell ...

  8. cmake和make

    学计算机的,在写代码的时候,IDE安装好,环境按着教程配置好,就直接代码了,编辑器的具体原理只是一知半解,现在来系统学习一下,为了方便以后学习HElib! make和cmake 写程序大体步骤为: 1 ...

  9. 【BIGDATA】ElasticSearch HEAD插件的GET请求的坑

    今使用HEAD插件,发现复杂查询功能下,使用GET请求有坑. 查询语句如下: GET kk/_search { "query": { "match": { &q ...

  10. Hive 默认分隔符

    引言 Hive 中的默认分隔符是 ^A (\001) ,这是一种特殊的分隔符,使用的是 ASCII 编码的值,键盘是打不出来的 查看 Hive 默认分隔符文件 Linux 上的文件 以 \001 作为 ...