【opencv】 常用工具总结

本文介绍了如何使用OpenCV进行图像处理,包括基本的图片读取、展示和线性绘制功能,以及如何修改图片尺寸。重点展示了如何在图片上添加分割线并调整大小,适合初学者了解OpenCV的基本操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、核心函数解释

1)OpenCV库的引入:import cv2

OpenCV读取的图片,图片数据的组织形式为bgr;

2) 读取图像:cv2.imread(arg1, arg2)

函数参数:arg1表示想要读取的图片所在的位置;arg2表示读取模式;其中arg2 = 1表示读取彩色 arg2 = 0表示灰度;

3) 展示图片:cv2.imshow(arg1, img)

函数参数:arg1表示显示出来的图片窗口的名称; img表示需要展示的图片;

4) 等待输入:cv2.waitKey(n)

函数参数:n值表示等待用户输入需要的时间,单位时毫秒,n = 0图片一直在显示;

序号功能
1opencv画线
2修改图片像素大小
3图片局部裁剪

>> opencv画线

定义方法def LineAtext1中的内容可工具实际情况删减,此处展示模式较为完整。

# -----------------------------open CV画分割线--------------------------
import cv2
import sys
from PyQt5.QtWidgets import QWidget
from PyQt5.QtWidgets import QApplication, QMainWindow

class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.open_img()

    def open_img(self):
        num_1 = ['A', 'B', 'C', 'D', 'E', 'F']
        image1 = cv2.imread('D:/Users/xuyf2/Desktop/jier/left/cp1631759505img_right_NG.jpg', cv2.IMREAD_COLOR)
        image = self.LineAtext1(image1, 110, 130, 360, 80, 250, 90, num_1)
        cv2.namedWindow("image")
        cv2.imshow('image', image)
        cv2.waitKey(0)            # 图片一直显示
        cv2.destroyAllWindows()

    # 分割线
    def LineAtext1(self, image, left_x, left_y, right_x, right_y, define_long, define_width, num):
        font = cv2.FONT_HERSHEY_SIMPLEX
        text_size = 0.6
        text_color = (0, 0, 0)
        text_thin = 2
        line_color = (255, 0, 0)
        line_thin = 3
        # define_long = 250  #定义方框长度
        # define_width = 90  #定义方框宽度
        # image = cv2.imread(img_path)
        # B2
        cv2.line(image, (left_x, left_y), (left_x + define_long, left_y), line_color, line_thin)
        cv2.putText(image, num[0], (left_x + int(define_long / 2), left_y + int(define_width / 2)), font, text_size,text_color, text_thin)
        # B4
        cv2.line(image, (left_x, left_y + define_width), (left_x + define_long, left_y + define_width), line_color,line_thin)
        cv2.putText(image, num[1], (left_x + int(define_long / 2), left_y + 3 * int(define_width / 2)), font, text_size,text_color, text_thin)
        # B6
        cv2.line(image, (left_x, left_y + 2 * define_width), (left_x + define_long, left_y + 2 * define_width), line_color,line_thin)
        cv2.putText(image, num[2], (left_x + int(define_long / 2), left_y + 5 * int(define_width / 2)), font, text_size,text_color, text_thin)
        #
        cv2.line(image, (left_x, left_y + 3 * define_width), (left_x + define_long, left_y + 3 * define_width), line_color,line_thin)
        #
        cv2.line(image, (left_x + define_long, 0), (left_x + define_long, 480), line_color, line_thin)
        cv2.line(image, (left_x, 0), (left_x, 480), line_color, line_thin)
        cv2.line(image, (left_x + 2 * define_long, 0), (left_x + 2 * define_long, 480), line_color, line_thin)
        # B1
        cv2.line(image, (right_x, right_y), (right_x + define_long, right_y), line_color, line_thin)
        cv2.putText(image, num[3], (right_x + int(define_long / 2), right_y + int(define_width / 2)), font, text_size,text_color, text_thin)
        # B3
        cv2.line(image, (right_x, right_y + define_width), (right_x + define_long, right_y + define_width), line_color,line_thin)
        cv2.putText(image, num[4], (right_x + int(define_long / 2), right_y + 3 * int(define_width / 2)), font, text_size,text_color, text_thin)
        # B5
        cv2.line(image, (right_x, right_y + 2 * define_width), (right_x + define_long, right_y + 2 * define_width),line_color, line_thin)
        cv2.putText(image, num[5], (right_x + int(define_long / 2), right_y + 5 * int(define_width / 2)), font, text_size,text_color, text_thin)
        #
        cv2.line(image, (right_x, right_y + 3 * define_width), (right_x + define_long, right_y + 3 * define_width),line_color, line_thin)
        return image

if __name__ == '__main__':
    app = QApplication(sys.argv)
    mainWindow = MainWindow()
    sys.exit(app.exec_())

 >>opencv 修改图片大小

# 修改图像大小
import cv2
import time
cover_path = "D:/Users/xuyf2/Desktop/lego_jier/cp1622130030.jpg"
save_path= "D:/Users/xuyf2/Desktop/lego_jier/save_small_photo/"
im1 = cv2.imread(cover_path)
im2 = cv2.resize(im1,(640,480),)  # 为图片重新指定尺寸

img_str = 'cp' + str(int(time.time()))
cv2.imwrite(save_path + '1' + img_str + ".jpg", im2)  # 保存画图后图片

  >>opencv 两图像拼接

from PIL import Image
from matplotlib import pyplot as plt

def join(png1, png2):

    img1, img2 = Image.open(png1), Image.open(png2)
    print('1', type(img1))
    # 统一图片尺寸,可以自定义设置(宽,高)
    img1 = img1.resize((110, 124), Image.ANTIALIAS)
    print('2', type(img1))
    img2 = img2.resize((110, 124), Image.ANTIALIAS)
    size1, size2 = img1.size, img2.size

    joint = Image.new('RGB', (size1[0] + size2[0], size1[1]))
    loc1, loc2 = (0, 0), (size1[0], 0)
    joint.paste(img1, loc1)
    joint.paste(img2, loc2)

    plt.imshow(joint)
    plt.show()

if __name__ == '__main__':
    # 两张图片地址
    png1 = r"D:/Users/xuyf2/Desktop/lego_jier/crop2/2cp1637243269.jpg"
    png2 = r"D:/Users/xuyf2/Desktop/lego_jier/crop1/1cp1637243581.jpg"
    # 横向拼接
    join(png1, png2)

### OpenCV 阈值处理工具使用教程 #### 什么是阈值处理? 阈值处理是一种常见的图像处理技术,主要用于将灰度图像转换为二值图像。通过设定一个特定的阈值,可以将图像分为前景和背景两部分[^2]。 #### 基础概念 在OpenCV中,阈值处理的核心在于`cv2.threshold()`函数。该函数允许用户定义一个阈值以及最大像素值,并根据不同的模式对输入图像进行处理。常用的模式包括简单二值化、反向二值化、截断等[^3]。 #### 函数原型 以下是`cv2.threshold()`函数的基本形式: ```python ret, thresh = cv2.threshold(src, thresh_value, maxval, type) ``` - `src`: 输入图像(通常是单通道灰度图像)。 - `thresh_value`: 设定的阈值。 - `maxval`: 超过或低于阈值时赋予的最大值。 - `type`: 阈值处理的方式,支持多种选项,例如`cv2.THRESH_BINARY`, `cv2.THRESH_BINARY_INV`, `cv2.THRESH_TRUNC`等。 #### 实现步骤说明 为了实现阈值处理,首先需要加载一张图片并将其转换为灰度图。接着调用`cv2.threshold()`完成具体的阈值操作。下面是一个完整的代码示例: ```python import cv2 # 加载原始图像并转化为灰度图 image = cv2.imread('example.jpg', cv2.IMREAD_GRAYSCALE) # 定义阈值参数 threshold_value = 175 maximum_value = 255 # 应用简单的二值化方法 _, binary_image = cv2.threshold(image, threshold_value, maximum_value, cv2.THRESH_BINARY) # 显示结果 cv2.imshow('Original Image', image) cv2.imshow('Binary Thresholded Image', binary_image) cv2.waitKey(0) cv2.destroyAllWindows() ``` 上述代码展示了如何读取一张图片并通过指定的阈值对其进行二值化处理。 #### 处理多通道彩色图像 对于RGB或其他多通道彩色图像,在执行阈值处理前需先将其转换成单一通道的形式。如果希望保留颜色信息,则可以通过逐通道分离的方法分别设置阈值。 #### 自适应阈值处理 除了固定全局阈值外,还可以采用自适应阈值策略来应对光照变化较大的场景。这可通过`cv2.adaptiveThreshold()`实现,它会依据局部区域特性动态调整阈值。 ```python adaptive_thresh = cv2.adaptiveThreshold( gray_image, maxValue=255, adaptiveMethod=cv2.ADAPTIVE_THRESH_MEAN_C, thresholdType=cv2.THRESH_BINARY, blockSize=11, C=2 ) ``` 这里引入了额外两个重要参数——blockSize 和 C 来控制窗口大小和平滑程度。 --- #### 总结 综上所述,利用OpenCV提供的强大功能能够轻松完成各种复杂的图像预处理工作,其中就包含了灵活高效的阈值调节机制。无论是基础的手动配置还是高级别的自动化方案都能满足不同层次的需求[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

凡先生的笔

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

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

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

打赏作者

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

抵扣说明:

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

余额充值