OpenCV-Python的一些简单用法

说出来你可能不信, opencv的效果比美图秀秀要好很多,(不过就是很吃操作)

首先一定要有这句话 import cv2(作用是导入opencv库)大概就和c语言的void main()一样重要吧。

cv2.imshow() 显示处理后的图像
如果说从最简单的开始的话。那么差不多就是从读入和 写入保存开始

cv2.imread() 读入照片

imread(img_path,flag) 读取图片,返回图片对象
img_path: 图片的路径,即使路径错误也不会报错,但打印返回的图片对象为None
flag:cv2.IMREAD_COLOR,读取彩色图片,图片透明性会被忽略,为默认参数,也可以传入1
cv2.IMREAD_GRAYSCALE,按灰度模式读取图像,也可以传入0
cv2.IMREAD_UNCHANGED,读取图像,包括其alpha通道,也可以传入-1

cv2.imshow()展现照片

imshow(window_name,img):显示图片,窗口自适应图片大小
window_name: 指定窗口的名字
img:显示的图片对象
可以指定多个窗口名称,显示多个图片

waitKey(millseconds) 键盘绑定事件,阻塞监听键盘按键,返回一个数字(不同按键对应的数字不同)
millseconds: 传入时间毫秒数,在该时间内等待键盘事件;传入0时,会一直等待键盘事件

destroyAllWindows(window_name)
window_name: 需要关闭的窗口名字,不传入时关闭所有窗口

cv2.imwrite() 写入照片

imwrite(img_path_name,img)
img_path_name:保存的文件名
img:文件对象

cv2.namedWindow(),这个是创建你图片的标题。(如果你输入中文的话它会乱码)
说句实话 目前使用的是Python3.7里对OpenCV-Python接口的中文支持并不是很友好。(简单说就是你用中文,它就搞你)
#窗口等待任意键盘按键输入,0为一直等待,其他数字为毫秒数
cv2.waitKey(0)
#销毁窗口,退出程序
cv2.destroyAllWindows()这两个可以并用在一起,就差不多有输入一个数字,消除窗口这个效果

cv2.imread_color:默认参数,读入一副彩色图片,忽略alpha通道 (这里补充一下 阿尔法通道(Alpha Channel)是指一张图片的透明和半透明度)

cv2.IMREAD_GRAYSCALE:读入灰度图片 (灰度图的话,其实简单说就是黑白照,这个就是用灰色来表示红 ,绿,蓝三种颜色的比重)

cv2.IMREAD_UNCHANGED:读入完整图片,包括alpha通道(png有,jpg无)(这是输入一个完整的照片的无压缩格式,jpg的话就没办法了。因为它已经被压缩了)
( 大小写一般是不影响编译器判别你的内容,因为这些函数是它的库函数,如果是你是自己定义的函数,前后大小写不一致的话,那么它会报错)

print(imgviewx.shape) 这个就是用来输出:高像素,宽像素,通道数 ,
关于获取相片的一些相关信息这里我就不多介绍了,因为事实上好像真的没什么用。。

这个是关于美颜的,简单说美白效果和valuex值有关,valuex的值越大越白
valuex=50;
imgviewx=cv2.bilateralFilter(这个可以随意,这个是我自己的照片的标题)(cv2.imread(“imgx/zc(这个是照片的名字)).jpg”),valuex,valuex * 2,valuex / 2)(后面你可以自己选择,加减乘除看个人喜欢)

这个是关于对比度和亮度调整
duix=0.5 #对比度
lightx=0 #亮度
这个的用法也是和上面差不多,就不多解释了。

#显示文字
我是按这个格式打的 参数:图像,文字内容, 坐标( x , y ) ,字体,大小,颜色( B , G ,R ),字体厚度
#颜色值为0-255
font = cv2.FONT_HERSHEY_SIMPLEX # 定义字体(看个人喜好了。)
imgviewx = cv2.putText(imgviewx,“黄顺狗打败八倍镜”( 这个是输入的字体,建议还是英文比较好,中文可以用,但是怕乱码 ),(10, 50), font, 1.2, (0, 0, 255), 5)

创建一个图形,使用np,所以效率高
def cjtx():
# 初始化像素点值全为0 (rgb都为零,所以是黑色)
#参数:([高,宽,通道数],每个通道占的位数(一个字节))
imgx=np.zeros([400,600,3],np.uint8)

  #初始化像素点值为全为1
  #imgx[110:130,50:70,2]表示一个范围:[高度起始点:高度结束点,宽度起始点:宽度结束点,哪个通道],起始点均以左上角
 #imgx[:,:,0]=np.ones([400,600],np.uint8)*255  #最终结果为第一个通道(B)全为255,所以是蓝色

imgx[110:130,50:70,1]=np.ones([20,20],np.uint8)*255
cv2.imshow(“第二个图形窗口”,imgx)
这样就可以创建一个图形,至于大小颜色可以在imgx里面修改

#图片区域处理
def pictureArea():
global imgviewx
#得到截图
areax=imgviewx[110:529,778:1200]
#将图片由RGB(3通道)转换为灰度(2通道)
areax=cv2.cvtColor(areax,cv2.COLOR_BGR2GRAY)
#将图片有2通道还原成3通道,但色彩不能还原
areax2=cv2.cvtColor(areax,cv2.COLOR_GRAY2RGB)
#处理后的区域写到原图上
imgviewx[110:529, 778:1200]=areax2
#显示截图
cv2.imshow(“area”,areax)
上面只是展示了一些基本的方法。。。希望各位大佬可以补充

这个操作是把两张图片合并在一起(如果做成一张图片在另一张图片上移动的话大小是可以不一样的。这里提醒一点。如果通道不一样的话,两张图片看起来就没有边际,就是有点遮挡的不自然的感觉)
def pixel_operation():
#读入两张大小和通道相同的图片
img1=cv2.imread(“imgx/img1.jpg”) (这个是我的照片,大家可以随意)
img2=cv2.imread(“imgx/img2.jpg”)
print(img1.shape, “=====”, img2.shape)

创建一个大小可调整的窗口

 cv2.namedWindow("operation", cv2.WINDOW_NORMAL)
 cv2.imshow("img111", img1)
 cv2.imshow("img222",img2)
 #处理图片
 #像素点相加,如0(黑色),255(白色),0+255=255(白色),超过255还是白色
 #imgoperation=cv2.add(img1,img2)
 #像素相减,如0(黑色),255(白色),0-255=-255=0(黑色)
#imgoperation=cv2.subtract(img1,img2)
 #像素相除,255(白色),0/255=0(黑色)
 #imgoperation=cv2.divide(img1,img2)
 #像素相乘,255(白色),0*255=0(黑色)
 #imgoperation=cv2.multiply(img2,img1)
 #像素与,二进制与,如0与255为00000000&11111111=00000000 
 imgoperation=cv2.bitwise_and(img1,img2)
 #像素或
 imgoperation=cv2.bitwise_or(img1,img2)

#显示处理后的图片
cv2.imshow(“operation”, imgoperation)

  关于相关颜色的情况,大家可以自己的试



  **实际上造梦西游这种游戏就是两张图片叠在一起,一张图片在移动的效果**(一般的2d游戏都是这个方法)
 
 用下面这个方法就可以和键盘上的操作联系在一起
 #当前状态、之前状态
if flag > -1 and flag !=pre_flag:
    cur_flag = flag
pre_flag = flag
#响应actor移动事件
if cur_flag == ord('w'):
    y = y - delta
elif cur_flag == ord('s'):
    y = y + delta
elif cur_flag == ord('a'):
    x = x - delta
elif cur_flag == ord('d'):
    x = x + delta
else:
    1+1

#显示
print('Actor(x,y) = ('+str(x)+','+str(y)+')')
background = image_on_image(background,actor,x,y)
注意(因为图像的边缘是不存负数这一说法,为了防止他出界,编译器默认就是直接当作bug,为了能压边)
需要多考虑一个当x或者y<0的情况,同时另一边也是一样的,要保证它不能走出,需要限制不能大于一个值

这个是制作图像边框,(大概就是普通边框包裹一圈的感觉)
cv2.copyMakeBorder()
参数:
img:图像对象
top,bottom,left,right: 上下左右边界宽度,单位为像素值
borderType:
cv2.BORDER_CONSTANT, 带颜色的边界,需要传入另外一个颜色值
cv2.BORDER_REFLECT, 边缘元素的镜像反射做为边界
cv2.BORDER_REFLECT_101/cv2.BORDER_DEFAULT
cv2.BORDER_REPLICATE, 边缘元素的复制做为边界
CV2.BORDER_WRAP
value: borderType为cv2.BORDER_CONSTANT时,传入的边界颜色值,如[0,255,0]

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值