一、OpenCV顯示圖片
在使用OpenCV之前,我們需要將原始圖像加載到內存中。下面代碼演示了如何使用OpenCV加載圖像並將其顯示在窗口中:
import cv2
# 加載圖像
img = cv2.imread('img.jpg')
# 創建圖像窗口
cv2.namedWindow('image', cv2.WINDOW_NORMAL)
# 顯示圖像
cv2.imshow('image', img)
# 等待關閉窗口
cv2.waitKey(0)
# 釋放窗口
cv2.destroyAllWindows()
二、OpenCV圖片處理
OpenCV支持圖像操作,這包括通道分離、圖像旋轉、圖像翻轉、通道合併等操作。下面代碼演示了如何使用OpenCV對圖像進行通道拆分,並在RGB和灰度之間轉換:
import cv2
# 加載圖像
img = cv2.imread('img.jpg')
# 拆分通道
b, g, r = cv2.split(img)
# 合併通道
img = cv2.merge((b, g, r))
# 將圖像轉換為灰度
gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
# 創建圖像窗口
cv2.namedWindow('image', cv2.WINDOW_NORMAL)
# 顯示原始圖像
cv2.imshow('image', img)
# 顯示灰度圖像
cv2.imshow('gray', gray)
# 等待關閉窗口
cv2.waitKey(0)
# 釋放窗口
cv2.destroyAllWindows()
三、OpenCV圖像放大
當我們需要將圖像進行放大時,OpenCV提供了兩種方法。第一種方法是使用cv2.resize()函數來縮放圖像,第二種方法是使用cv2.pyrUp()函數來執行圖像金字塔操作。
1、使用cv2.resize()函數
cv2.resize()函數可以將圖像縮放到指定的大小。下面代碼演示了如何使用cv2.resize()函數將圖像放大兩倍:
import cv2
# 加載圖像
img = cv2.imread('img.jpg')
# 縮放圖像
resized_img = cv2.resize(img, (0, 0), fx=2, fy=2)
# 創建圖像窗口
cv2.namedWindow('image', cv2.WINDOW_NORMAL)
# 顯示原始圖像
cv2.imshow('image', img)
# 顯示縮放圖像
cv2.imshow('resized image', resized_img)
# 等待關閉窗口
cv2.waitKey(0)
# 釋放窗口
cv2.destroyAllWindows()
2、使用cv2.pyrUp()函數
cv2.pyrUp()函數可以將圖像放大一倍,並通過重複使用此函數來達到放大任意倍數的目的。下面代碼演示了如何使用cv2.pyrUp()函數來放大圖像:
import cv2
# 加載圖像
img = cv2.imread('img.jpg')
# 放大圖像
new_shape = (img.shape[1]*2, img.shape[0]*2)
larger_img = cv2.pyrUp(img, dstsize=new_shape)
# 創建圖像窗口
cv2.namedWindow('image', cv2.WINDOW_NORMAL)
# 顯示原始圖像
cv2.imshow('image', img)
# 顯示放大圖像
cv2.imshow('larger image', larger_img)
# 等待關閉窗口
cv2.waitKey(0)
# 釋放窗口
cv2.destroyAllWindows()
四、OpenCV縮放圖像實驗報告
接下來,我們來進行縮放圖像實驗。我們將按照如下步驟進行:
1、加載圖像
2、使用cv2.resize()函數將圖像縮小到原始大小的50%
3、使用cv2.resize()函數將圖像縮小到原始大小的25%
4、使用cv2.pyrDown()函數將圖像縮小到原始大小的50%
5、使用cv2.pyrDown()函數將圖像縮小到原始大小的25%
下面是實驗代碼:
import cv2
# 加載圖像
img = cv2.imread('img.jpg')
# 縮小圖像到原始大小的50%
resized1 = cv2.resize(img, (0, 0), fx=0.5, fy=0.5)
# 縮小圖像到原始大小的25%
resized2 = cv2.resize(img, (0, 0), fx=0.25, fy=0.25)
# 使用金字塔縮小圖像到原始大小的50%
pyrdown1 = cv2.pyrDown(img)
pyrdown1 = cv2.pyrDown(pyrdown1)
# 使用金字塔縮小圖像到原始大小的25%
pyrdown2 = cv2.pyrDown(img)
pyrdown2 = cv2.pyrDown(pyrdown2)
pyrdown2 = cv2.pyrDown(pyrdown2)
# 創建圖像窗口
cv2.namedWindow('image', cv2.WINDOW_NORMAL)
# 顯示原始圖像
cv2.imshow('image', img)
# 顯示縮小後圖像1
cv2.imshow('resized1', resized1)
# 顯示縮小後圖像2
cv2.imshow('resized2', resized2)
# 顯示金字塔縮小後圖像1
cv2.imshow('pyrdown1', pyrdown1)
# 顯示金字塔縮小後圖像2
cv2.imshow('pyrdown2', pyrdown2)
# 等待關閉窗口
cv2.waitKey(0)
# 釋放窗口
cv2.destroyAllWindows()
五、OpenCV怎麼把圖片變清晰了
在使用OpenCV處理圖像時,我們可能會遇到模糊圖像的情況。OpenCV提供了兩種方法來增強模糊圖像的清晰度:銳化和去模糊。
1、銳化圖像
銳化可以幫助我們強調圖像中的邊緣和細節,使圖像更加清晰。下面代碼演示了如何使用cv2.filter2D()函數對圖像進行銳化處理:
import cv2
import numpy as np
# 加載圖像
img = cv2.imread('img.jpg')
# 定義銳化內核
kernel = np.array([[-1,-1,-1], [-1,9,-1], [-1,-1,-1]])
# 使用內核進行銳化
sharp_img = cv2.filter2D(img, -1, kernel)
# 創建圖像窗口
cv2.namedWindow('image', cv2.WINDOW_NORMAL)
# 顯示原始圖像
cv2.imshow('image', img)
# 顯示銳化後的圖像
cv2.imshow('sharp image', sharp_img)
# 等待關閉窗口
cv2.waitKey(0)
# 釋放窗口
cv2.destroyAllWindows()
2、去模糊
去模糊可以恢復圖像的清晰度,但有可能會引入噪音。下面代碼演示了如何使用cv2.filter2D()函數對圖像進行去模糊處理:
import cv2
import numpy as np
# 加載模糊的圖像
img = cv2.imread('blurry_img.jpg')
# 定義去模糊內核
kernel = np.ones((5,5), np.float32)/25
# 使用內核進行去模糊
blurry_img = cv2.filter2D(img, -1, kernel)
# 創建圖像窗口
cv2.namedWindow('image', cv2.WINDOW_NORMAL)
# 顯示模糊的圖像
cv2.imshow('image', img)
# 顯示去模糊後的圖像
cv2.imshow('blurred image', blurry_img)
# 等待關閉窗口
cv2.waitKey(0)
# 釋放窗口
cv2.destroyAllWindows()
六、OpenCV圖片增強
當我們需要通過提高圖像的對比度和亮度來增強圖像時,OpenCV提供了cv2.addWeighted()函數。
下面代碼演示了如何使用cv2.addWeighted()函數對圖像進行增強處理:
import cv2
# 加載圖像
img = cv2.imread('img.jpg')
# 提高圖像的對比度和亮度
alpha = 1.5 # 對比度參數
beta = 0 # 亮度參數
enhanced_img = cv2.addWeighted(img, alpha, np.zeros(img.shape, img.dtype), 0, beta)
# 創建圖像窗口
cv2.namedWindow('image', cv2.WINDOW_NORMAL)
# 顯示原始圖像
cv2.imshow('image', img)
# 顯示增強後的圖像
cv2.imshow('enhanced image', enhanced_img)
# 等待關閉窗口
cv2.waitKey(0)
# 釋放窗口
cv2.destroyAllWindows()
七、OpenCV圖片截取
在使用OpenCV處理圖像時,我們可能需要從原始圖像中截取出感興趣的區域。下面代碼演示了如何使用numpy索引來截取圖像:
import cv2
# 加載圖像
img = cv2.imread('img.jpg')
# 截取圖像區域
cropped_img = img[100:300, 200:400]
# 創建圖像窗口
cv2.namedWindow('image', cv2.WINDOW_NORMAL)
# 顯示原始圖像
cv2.imshow('image', img)
# 顯示截取出的小圖像
cv2.imshow('cropped image', cropped_img)
# 等待關閉窗口
cv2.waitKey(0)
# 釋放窗口
cv2.destroyAllWindows()
八、QtOpenCV圖片縮放
Qt提供了一些用於圖形圖像處理的庫,其中最流行的是QtOpenCV庫。使用該庫,我們可以在Qt應用程序中展示OpenCV處理的圖像。
下面代碼演示了如何使用QWidget和QHBoxLayout組件來顯示OpenCV縮放後的圖像:
import sys
import cv2
from PyQt5.QtWidgets import QWidget, QLabel, QApplication, QHBoxLayout
from PyQt5.QtGui import QImage, QPixmap
class ImageViewer(QWidget):
def __init__(self):
super().__init__()
# 加載圖像
self.img = cv2.imread('img.jpg')
# 縮放圖像
self.resized_img = cv2.resize(self.img, (0, 0), fx=0.5, fy=0.5)
# 創建標籤
self.label_orig = QLabel(self)
self.label_resized = QLabel(self)
# 創建布局
hbox = QHBoxLayout()
hbox.addWidget(self.label_orig)
hbox.addWidget(self.label_resized)
# 設置窗口布局為布局
self.setLayout(hbox)
# 顯示圖像
self.show_image()
def show_image(self):
# 將原始圖像和縮放後的圖像轉換為QImage格式
qimg_orig = QImage(self.img.data, self.img.shape[1], self.img.shape[0], self.img.strides[0], QImage.Format_RGB888)
qimg_resized = QImage(self.resized_img.data, self.resized_img.shape[1], self.resized_img.shape[0], self.resized_img.strides[0], QImage.Format_RGB888)
# 將QImage格式的圖像設置為標籤的內容
self.label_orig.setPixmap(QPixmap.fromImage(qimg_orig))
self.label_resized.setPixmap(QPixmap.fromImage(qimg_resized))
# 調整標籤的大小
self.label_orig.adjustSize()
self.label_resized.adjustSize()
if __name__ == '__main__':
app = QApplication(sys.argv)
viewer = ImageViewer()
viewer.show()
sys.exit(app.exec_())
九、OpenCV圖片縮放原理</h原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/301586.html
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/301586.html