OpenCV4(3)-图像对象拷贝与创建(C++,Python,JS)

目录

环境

知识点

C++代码

Python代码

JS代码

返回总目录


环境

  • Python:3.6.5 OpenCV 4.1.2
  • C++:OpenCV 4.1.2
  • JS:OpenCV 4.5.0

环境搭建可参考:B站视频

欢迎访问博主搭建的 在线运行平台 (o゜▽゜)o☆

知识点

1、图像对象的拷贝

学过C++的应该都很清楚,拷贝分为深拷贝和浅拷贝

OpenCV的clone()和copyTo是深拷贝,赋值运算符‘=’是浅拷贝

头部保存了该图像的宽度和高度还有通道数等信息,数据部分保存了该图像的像素信息

2、图像对象的创建

常用方法有Mat::zeros()和Mat::ones()

C++代码

#ifndef DAY03
#define DAY03

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;

void day03() {

	Mat src = imread("E:\\_Image\\OpenCVTest\\girl.jpg");

	if (src.empty()) {
		cout << "could not load image.." << endl;
		return;
	}

	// 创建方法-克隆
	Mat m1 = src.clone();

	// 复制
	Mat m2;
	src.copyTo(m2);

	// 赋值法
	Mat m3 = src;

	// 创建空白图像
	Mat m4 = Mat::zeros(src.size(), src.type());
	Mat m5 = Mat::zeros(Size(512, 512), CV_8UC3);
	Mat m6 = Mat::ones(Size(512, 512), CV_8UC3);

	waitKey(0);
}

#endif // !DAY03

Python代码

import cv2 as cv
import numpy as np

# 查看版本
print(cv.__version__)

# 读取图像
src = cv.imread("E:/_Image/OpenCVTest/girl.jpg")

# 深拷贝 克隆图像
m1 = np.copy(src)

# 浅拷贝 赋值
m2 = src

# 修改 src,m2 也会跟着变
src[100:200, 200:300, :] = 255

# 显示
cv.imshow("src", src)
cv.imshow("m1", m1)
cv.imshow("m2", m2)

# 创建图像对象
m3 = np.zeros(src.shape, src.dtype)
cv.imshow("m3", m3)

m4 = np.zeros([512, 512], np.uint8)
m4[:, :] = 127
cv.imshow("m4", m4)

m5 = np.ones(shape=[512, 512, 3], dtype=np.uint8)
m5[:, :, 0] = 255
cv.imshow("m5", m5)

# 等待键盘输入
cv.waitKey()

# 释放内存
cv.destroyAllWindows()

JS代码

data() {
  return {
    num2type: {
      1: 'CV_8SC1',
      9: 'CV_8SC2',
      17: 'CV_8SC3',
      25: 'CV_8SC4',
      0: 'CV_8UC1',
      8: 'CV_8UC2',
      16: 'CV_8UC3',
      24: 'CV_8UC4',
      3: 'CV_16SC1',
      11: 'CV_16SC2',
      19: 'CV_16SC3',
      27: 'CV_16SC4',
      2: 'CV_16UC1',
      10: 'CV_16UC2',
      18: 'CV_16UC3',
      26: 'CV_16UC4',
      5: 'CV_32FC1',
      13: 'CV_32FC2',
      21: 'CV_32FC3',
      29: 'CV_32FC4',
      4: 'CV_32SC1',
      12: 'CV_32SC2',
      20: 'CV_32SC3',
      28: 'CV_32SC4',
      6: 'CV_64FC1',
      14: 'CV_64FC2',
      22: 'CV_64FC3',
      30: 'CV_64FC4'
    }
  }
},
methods: {
  onOpenCvReady() {
    if (!this.value) {
      this.$message.error('请选择一种创建类型')
      return
    }

    // 官方文档链接:https://docs.opencv.org/4.5.0/de/d06/tutorial_js_basic_ops.html
    const cv = window.cv

    // 读取图像
    const src = cv.imread('imageSrcRaw')

    // 拷贝 克隆 创建图像
    let dst = null
    switch (this.value) {
      case 1:
        dst = src.clone()
        break
      case 2:
        dst = new cv.Mat()
        src.copyTo(dst)
        break
      case 3:
        dst = new cv.Mat()
        break
      case 4:
        dst = new cv.Mat(512, 512, cv.CV_8UC4)
        break
      case 5:
        dst = new cv.Mat(512, 512, cv.CV_8UC4, [255, 0, 0, 127])
        break
      case 6:
        dst = cv.Mat.zeros(512, 512, cv.CV_8UC4)
        break
      case 7:
        dst = cv.Mat.ones(512, 512, cv.CV_8UC4)
        break
      case 8:
        dst = cv.Mat.eye(512, 512, cv.CV_8UC4)
        break
    }

    // 显示图像
    if (dst) cv.imshow('canvasOutput', dst)

    // 销毁所有 mat 释放内存
    src.delete()
    if (dst) dst.delete()
  },
  showImgInfo() {
    const img = window.cv.imread('imageSrcRaw')
    let content = ''
    content += 'img type: ' + this.num2type[img.type()] + ' '
    content += 'img cols: ' + img.cols + ' '
    content += 'img rows: ' + img.rows + ' '
    content += 'img depth: ' + img.depth() + ' '
    content += 'img channels: ' + img.channels() + ' '
    this.$alert(content, '图像属性', {
      confirmButtonText: '确定'
    })
  }
}

官方文档链接:https://docs.opencv.org/4.5.0/de/d06/tutorial_js_basic_ops.html

返回总目录

OpenCV4学习笔记 - 目录

如果这篇文章对您有帮助,欢迎给我的 github项目 点一个⭐ ο(=•ω<=)ρ⌒☆

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Apple_Coco

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值