opencv复制一个图片

1、引入opencv的库

import opencv

2、创建窗口

创建一个可以手动改变窗格大小的窗口,窗口名称为img

cv2.namedWindow('img',cv2.WINDOW_NORMAL)

3、设置窗口初始像素

设置img窗口的初始像素为640*480

cv2.resizeWindow('img',640,480)

3、读取图片并将其存取在变量之中

读取本目录中的图片,并将其存放在img之中。

img=cv2.imread('./pengke.jpeg')

4、展示图片,将图片显示在之前创建的窗格之中

cv2.imshow('img',img)

5、保存图像到当前目录下,并进行改名为123

 cv2.imwrite('./123.png',img)

6、总体代码以及效果

import cv2

#创建窗口
cv2.namedWindow('img',cv2.WINDOW_NORMAL)
cv2.resizeWindow('img',640,480)

#读取图片
img=cv2.imread('./pengke.jpeg')

while True:
    cv2.imshow('img',img)
    key=cv2.waitKey(0)
    if key ==ord('q'):
        break
    elif key ==ord('r'):
        cv2.imwrite('./123.png',img)
    else:
        print(key)
cv2.destroyAllWindows()

### 如何使用 OpenCV 进行图片的深度复制OpenCV 中,深度复制(deep copy)是指创建一个新的对象,该对象具有与原始对象相同的数据内容,但两者之间没有任何共享数据。这意味着修改副本中的像素值不会影响原始图像。 以下是几种实现深度复制的方法: #### 方法一:使用 `copy` 方法 通过调用图像矩阵的 `.copy()` 方法可以轻松完成深度复制。这种方法适用于 Python 接口下的 NumPy 数组表示形式的图像。 ```python import cv2 # 读取图像 image = cv2.imread('path_to_your_image.tiff') # 深度复制 deep_copy = image.copy() # 修改深拷贝的内容 deep_copy[0, 0] = [255, 0, 0] # 显示结果 cv2.imshow('Original Image', image) cv2.imshow('Deep Copy', deep_copy) cv2.waitKey(0) cv2.destroyAllWindows() ``` 此方法确保了 `deep_copy` 和 `image` 是两个完全独立的对象[^1]。 --- #### 方法二:使用 `np.copy` NumPy 提供了一个通用函数 `np.copy` 来执行数组的深度复制。对于 OpenCV 图像而言,这同样有效。 ```python import cv2 import numpy as np # 读取图像 image = cv2.imread('path_to_your_image.tiff') # 使用 np.copy 执行深度复制 deep_copy2 = np.copy(image) # 修改深拷贝的内容 deep_copy2[0, 0] = [0, 255, 0] # 显示结果 cv2.imshow('Original Image', image) cv2.imshow('Deep Copy via np.copy', deep_copy2) cv2.waitKey(0) cv2.destroyAllWindows() ``` 这里,`deep_copy2` 完全独立于 `image`,因此对其的操作不影响原始图像[^1]。 --- #### 方法三:C++ 中的 `Clone` 函数 如果使用的是 C++ 版本的 OpenCV,则可以通过 `Mat::clone()` 或者 `CopyTo` 方法来实现深度复制。 ##### 使用 `Clone` 方法 ```cpp #include <opencv2/opencv.hpp> using namespace cv; int main() { // 加载图像 Mat img1 = imread("image.jpg"); // 创建深拷贝 Mat img2 = img1.clone(); // 修改深拷贝 img2.at<Vec3b>(0, 0)[0] = 255; img2.at<Vec3b>(0, 0)[1] = 0; img2.at<Vec3b>(0, 0)[2] = 0; imshow("Original Image", img1); imshow("Cloned Image", img2); waitKey(0); return 0; } ``` 这段代码展示了如何利用 `clone` 方法生成一个不依赖原图的新图像对象[^2]。 ##### 使用 `CopyTo` 方法 另一种方式是借助 `CopyTo` 将源图像的内容复制到目标图像中。 ```cpp #include <opencv2/opencv.hpp> using namespace cv; int main() { // 加载图像 Mat img1 = imread("image.jpg"); // 创建新图像用于存储复制的结果 Mat img2(img1.size(), img1.type()); // 复制操作 img1.copyTo(img2); imshow("Original Image", img1); imshow("Copied Image", img2); waitKey(0); return 0; } ``` 这种方式更加灵活,允许指定条件或者掩码来进行部分区域的复制[^2]。 --- #### 总结 无论是 Python 环境还是 C++ 环境下,都可以方便地实现图像的深度复制。Python 用户可以选择内置的 `.copy()` 方法或是 NumPy 的 `np.copy`;而 C++ 开发者则有多种工具可用,比如 `clone` 和 `CopyTo`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值