2021-08-23opencv入门基本操作

Posted 叶桔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021-08-23opencv入门基本操作相关的知识,希望对你有一定的参考价值。

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()#图像基本操作操作,转换读取保存 

接下来会介绍图像的平滑操作,还有阈值,滤波计算

以上是关于2021-08-23opencv入门基本操作的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV最详细入门-python(代码全部可以直接运行)

OpenCV Java入门三 Mat的基本操作

OpenCV最详细入门-python(代码全部可以直接运行)

python opencv error “parallel_impl.cpp (240) WorkerThread 155: Can‘t spawn new thread: res = 11“(代码片

OpenCVQt + OpenCV 开发配置 + 入门知识(代码示例)

OpenCV编程入门目录