opencv入门基本操作(pycharm ,python)
基本操作
再看一些深度学习的代码的时候,涉及到一些cv的基本操作,可能会有困惑的地方,这里分享一下基础的操作和报错时的解决方法。
#1、读取、保存
```bash
img = cv2.imread('p1.jfif')
im = cv2.imread('p1.jfif', cv2.IMREAD_GRAYSCALE) # cv2.IMREAD_GRAYSCALE读取灰度图
print(img)
print(img.shape)
print(im)
print(im.shape)
cv2.imshow('image', img)
cv2.imshow('ima', im)
# 截取部分图像数据
cat = img[0:200, 0:200]
cv2.imshow('cat', cat)
#颜色通道提取
b,g,r=cv2.split(img)
print("b",b)
print("b.shape", b.shape)
img=cv2.merge((b,g,r))#将三通道进行组合,对应位置索引(0,1,2)
#只保留R
cur_img=img.copy()
cur_img[:,:,0]=0
cur_img[:,:,1]=0
cv_show('R',cur_img)
# #只保留G
# cur_img = img.copy()
# cur_img[:, :, 0] = 0
# cur_img[:, :, 2] = 0
# cv_show('G', cur_img)
cv2.imwrite('my.png', im) # 保存图片(路径,保存的东西)
cv2.waitKey(0) # 等待时间,毫秒版。0表示任意键终止
cv2.destroyWindow()
print(type(img)) # 数据的格式
print(img.size) # 像素点的个数
print(img.dtype) # 数据的类型
用cv2.imshow()显示图片的时候这两行一定要加上,不然可能看不到图片
cv2.waitKey(0) # 等待时间,毫秒版。0表示任意键终止
cv2.destroyWindow()
1. 读取:cv.imread(‘路径.png’)#路径找到你图片的存放位置,复制过来, ".png"是图片的格式,我是直接把图片保存到和.py文件同一个路劲下
2.另存为:cv2.imwrite()
3、编写代码的时候要注意对齐
## 边界填充
```bash
img = cv2.imread('p1.jfif')
top_size,bottom_size,left_size,right_szie=(50,50,50,50)
#复制最边缘像素
replicate=cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_szie,borderType=cv2.BORDER_REPLICATE)
#反射法,对感兴趣图像中像素在两边进行复制
reflect=cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_szie,borderType=cv2.BORDER_REFLECT)
#反射,以最边缘像素为轴对称
reflect101=cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_szie,cv2.BORDER_REFLECT_101)
#外包装法
wrap=cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_szie,cv2.BORDER_WRAP)
#常量法,常数值填充
constant=cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_szie,cv2.BORDER_CONSTANT,value=0)
plt.subplot(231),plt.imshow(img,'gray'),plt.title('ORIGINAL')
plt.subplot(232), plt.imshow(replicate, 'gray'), plt.title('REPLICATE')
plt.subplot(233), plt.imshow(reflect, 'gray'), plt.title('REFLECT')
plt.subplot(234), plt.imshow(reflect101, 'gray'), plt.title('101')
plt.subplot(235), plt.imshow(wrap, 'gray'), plt.title('WRAP')
plt.subplot(236), plt.imshow(constant, 'gray'), plt.title('CONS')
plt.show()
数值计算、两个图片
img_cat=cv2.imread('p1.jfif')
img_dog=cv2.imread('p2.jfif')
print(img_dog.shape)
print(img_cat.shape)
img_cat2=img_cat+10#所有像素点的值加10
img_cat1=(img_cat+img_cat2)[:5,:,0]#大于256的值取余
img_cat3=cv2.add(img_cat,img_cat2)[:5,:,0]#超过255的值取255
#图像融合
img_dog=cv2.resize(img_dog,(474,316))
img=img_cat+img_dog#大小相同时才能进行
res=cv2.resize(img_dog,(0,0),fx=2,fy=2)#所有像素点等比放大
img1=cv2.addWeighted(img_cat,0.4,img_dog,0.6,0)#按权重相加
# plt.subplot(231), plt.imshow(img_cat, 'img_cat'), plt.title('img_cat')
# plt.subplot(232), plt.imshow(img_dog, 'img_dog'), plt.title('img_dog')
# plt.subplot(233), plt.imshow(img, 'img'), plt.title('img')
# plt.subplot(234), plt.imshow(img1, 'img1'), plt.title('img1')
# cv2.imshow('res',res)
cv2.imshow('im',img)
cv2.imshow('im2',img1)
cv2.waitKey(0) # 等待时间,毫秒版。0表示任意键终止
cv2.destroyWindow()
对于批量注释的:按住ctrl+/可以直接将注释去掉
运行练习的小tips
如果安装了jupter可以直接在那个编译器,直接出结果,缺点就是要打开网页
我就直接在pycharm中新建一个py文件,写定义了一个函数,用if name语义调用就行啦。
def cv_show():
img = cv2.imread('p1.jfif')
im = cv2.imread('p1.jfif', cv2.IMREAD_GRAYSCALE) # cv2.IMREAD_GRAYSCALE读取灰度图
print(img)
print(img.shape)
print(im)
print(im.shape)
cv2.imshow('image', img)
cv2.imshow('ima', im)
# 截取部分图像数据
cat = img[0:200, 0:200]
cv2.imshow('cat', cat)
#颜色通道提取
b,g,r=cv2.split(img)
print("b",b)
print("b.shape", b.shape)
img=cv2.merge((b,g,r))#将三通道进行组合,对应位置索引(0,1,2)
#只保留R
cur_img=img.copy()
cur_img[:,:,0]=0
cur_img[:,:,1]=0
cv_show('R',cur_img)
# #只保留G
# cur_img = img.copy()
# cur_img[:, :, 0] = 0
# cur_img[:, :, 2] = 0
# cv_show('G', cur_img)
cv2.imwrite('my.png', im) # 保存图片(路径,保存的东西)
cv2.waitKey(0) # 等待时间,毫秒版。0表示任意键终止
cv2.destroyWindow()
print(type(img)) # 数据的格式
print(img.size) # 像素点的个数
print(img.dtype) # 数据的类型
if __name__=="__main__":
cv_show()#图像基本操作操作,转换读取保存
接下来会介绍图像的平滑操作,还有阈值,滤波计算