Opencv 图像处理相关API

opencv的java api_Atitit 图像处理 调用opencv 通过java  api   attilax总结 Atitit 图像处理 调用opencv通过java api attilax总结1.1.Opencv java api的支持opencv2.4.2就有了对java api的支持2012-07-04opencv2.4.2 就有了对java api的支持虽说以前可以使用jna调用dll但是比较麻烦。数据类型可能对应不上。。使用python调用dll也是可以的。有了全新的java api支持那就最... 阅读详情

opencv

图像基本操作

import numpy as np
import cv2 as cv
# 读取图片并显示
original = cv.imread('data/forest.jpg')
cv.imshow('Original', original)
# 显示图片某个颜色通道的图像
blue = np.zeros_like(original)
blue[:, :, 0] = original[:, :, 0]  # 0 - 蓝色通道
cv.imshow('Blue', blue)
green = np.zeros_like(original)
green[:, :, 1] = original[:, :, 1]  # 1 - 绿色通道
cv.imshow('Green', green)
red = np.zeros_like(original)
red[:, :, 2] = original[:, :, 2]  # 2 - 红色通道
cv.imshow('Red', red)
# 图像裁剪
h, w = original.shape[:2]
l, t = int(w / 4), int(h / 4)
r, b = int(w * 3 / 4), int(h * 3 / 4)
cropped = original[t:b, l:r]
cv.imshow('Cropped', cropped)
#图像缩放 interpolation=线型插值
scaled1 = cv.resize(original, (int(w / 4), int(h / 4)),
    interpolation=cv.INTER_LINEAR)
cv.imshow('Scaled1', scaled1)
scaled2 = cv.resize(
    scaled1, None, fx=4, fy=4,
    interpolation=cv.INTER_LINEAR)
cv.imshow('Scaled2', scaled2)
cv.waitKey()
# 图像文件保存
cv.imwrite('data/blue.jpg', blue)

图像平滑处理

均值滤波

均值滤波是典型的线性滤波算法。

它是指在图像上由一个归一化卷积框针对目标全体像素执行卷积运算,使用均值化后的结果来代替原来的像素值。

均值滤波本身存在着固有的缺陷,即它不能很好地保护图像细节,在图像去噪的同时也破坏了图像的细节部分,从而使图像变得模糊,不能很好地去除噪声点。

def cv_blur(img):
    # img: 原始图像
    # (5, 5): 卷积窗大小
    dst = cv.blur(img, (5, 5))
    return dst

img = cv.imread('data/miantiao.jpg')
cv.imshow('original', img)
高斯滤波

高斯滤波是一种线性平滑滤波,适用于消除高斯噪声。

高斯滤波将计算每一个像素点的值,该值由其本身和邻域内的其他像素值经过高斯函数加权平均后得到。

高斯滤波后图像被平滑的程度取决于标准差。离中心越近的像素权重越高。因此,相对于均值滤波(mean filter)它的平滑效果更柔和,而且边缘保留的也更好。

def cv_gaussian_blur(img):
    # 0,0 : 分别表示x方向标准差与y方向标准差。若为0则代表按照内核大小自动适配。
    dst = cv.GaussianBlur(img, (5, 5), 0, 0)
    return dst

dst2 = cv_gaussian_blur(img)
cv.imshow('gaussian blur', dst2)
中值滤波

中值滤波法是一种非线性平滑算法,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值。
中值滤波模板就是用卷积框中像素的中值代替中心值,达到去噪声的目的。
中值滤波一般用于去除椒盐噪声,在图像中,它是一种随机出现的白点或者黑点,可能是亮的区域有黑色像素或是在暗的区域有白色像素(或是两者皆有)。

def cv_median_blur(img):
	#5:  内核大小 (只需一个值,因为我们使用正方形窗口),必须为奇数。    
    dst = cv.medianBlur(img, 5)
    return dst

median_src = cv.imread('data/median.jpg')
cv.imshow('median original', median_src)
dst3 = cv_median_blur(median_src)
cv.imshow('median blur', dst3)
双边滤波

双边滤波是一种非线性滤波器,它可以达到保持边缘、降噪平滑的效果。
基于高斯分布,用周边像素亮度值的加权平均代表某个像素的强度。
之所以能够达到保边去噪的滤波效果是因为滤波器由两个函数构成:一个函数是由几何空间距离决定滤波器系数,另一个是由像素差值决定滤波器系数。
高斯滤波器只考虑像素之间的空间关系,而不会考虑像素值之间的关系(像素的相似度)。所以这种方法不会考虑一个像素是否位于边界。因此边界也会别模糊掉,而这正不是我们想要 。
双边滤波在同时使用空间高斯权重和灰度值相似性高斯权重。空间高斯函数确保只有邻近区域的像素对中心点有影响,灰度值相似性高斯函数确保只有与中心像素灰度值相近的才会被用来做模糊运算。所以这种方法会确保边界不会被模糊掉,因为边界处的灰度值变化比较大。

def cv_bilateral_blur(img):
	# 50: 邻域直径
    # 40: 颜色标准差,颜色标准差越大,表示更大范围的颜色会被混合在一起。
    # 5:  空间标准差,空间标准差越大,模糊范围更大。但如果没有达到颜色标准差的标准则会保留边界。
    dst = cv.bilateralFilter(img, 50, 40, 5)
    return dst

bilateral_src = cv.imread('data/qtx_.jpg')
cv.imshow('bilateral original', bilateral_src)
dst3 = cv_bilateral_blur(bilateral_src)
cv.imshow('bilateral blur', dst3)

图像阈值处理

图像阈值处理是最简单的图像分割的方法。

应用举例:从一副图像中利用阈值分割出我们需要的物体部分(当然这里的物体可以是一部分或者整体)。这样的图像分割方法是基于图像中物体与背景之间的灰度差异,而且此分割属于像素级的分割。

为了从一副图像中提取出我们需要的部分,应该用图像中的每一个像素点的灰度值与选取的阈值进行比较,并作出相应的判断。(注意:阈值的选取依赖于具体的问题。即:物体在不同的图像中有可能会有不同的灰度值。

一旦找到了需要分割的物体的像素点,我们可以对这些像素点设定一些特定的值来表示。(例如:可以将该物体的像素点的灰度值设定为:‘0’(黑色),其他的像素点的灰度值为:‘255’(白色);当然像素点的灰度值可以任意,但最好设定的两种颜色对比度较强,方便观察结果)。

简单阈值化处理

简单阈值化处理先要选定一个特定的阈值量,比如:125,这样,大于125的像素点与小于125的像素点分别设置新的不同的灰度值。

def simple_thresholding(img):  #简单阈值化
    # 设置127为阈值,大于127的像素点的灰度值设定为255,灰度值小于125的像素点的灰度值设定为0。
    ret, thresh1 = cv.threshold(img, 127, 255, cv.THRESH_BINARY)
    # 设置127为阈值,大于127的像素点的灰度值设定为0,灰度值小于125的像素点的灰度值设定为255。
    ret, thresh2 = cv.threshold(img, 127, 255, cv.THRESH_BINARY_INV)
    # 设置127为阈值,大于127的像素点的灰度值设定为255,灰度值小于127的像素点的灰度值不变。
    ret, thresh3 = cv.threshold(img, 127, 255, cv.THRESH_TRUNC)
    # 设置127为阈值,大于127的像素点的灰度值不变,灰度值小于127的像素点的灰度值设置为0。
    ret, thresh4 = cv.threshold(img, 127, 255, cv.THRESH_TOZERO)
    # 设置127为阈值,大于127的像素点的灰度值设置为0,灰度值小于125的像素点的灰度值不变。
    ret, thresh5 = cv.threshold(img, 127, 255, cv.THRESH_TOZERO_INV)

    titles = ['Original Image', 'BINARY', 'BINARY_INV', 'TRUNC', 'TOZERO', 'TOZERO_INV']
    images = [img, thresh1, thresh2, thresh3, thresh4, thresh5]
    return titles, images

# 测试
img = cv.cvtColor(cv.imread('data/chepai.jpg'), cv.COLOR_BGR2GRAY)
titles, imgs = adaptive_thresholding(img)
for title, img in zip(titles, imgs):
    cv.imshow(title, img)
    cv.waitKey()
自适应阈值化处理

在上一节中,我们使用一个全局值作为阈值。但这在某些情况下效果不好。例如,如果图像在不同区域具有不同的照明条件时。在这种情况下,自适应阈值化可以帮助。算法根据像素周围的一个小区域来确定像素的阈值。因此,对于同一幅图像的不同区域,我们得到了不同的阈值,对于不同光照的图像,得到了更好的结果。

def adaptive_thresholding(img):
    img = cv.medianBlur(img, 3)
    ret, th1 = cv.threshold(img, 127, 255, cv.THRESH_BINARY)
    # th1: 输入图像
    # 255: 超过计算所得阈值时设置为255
    # 参数常量可设置如下:
    #     cv.ADAPTIVE_THRESH_MEAN_C:阈值是邻域面积的平均值减去常数C。
    #     cv.ADAPTIVE_THRESH_GAUSSIAN_C:阈值是邻域值减去常数C的高斯加权和。
    # 11:  窗口大小
    # 2:   常数C
    th2 = cv.adaptiveThreshold(th1, 255, cv.ADAPTIVE_THRESH_MEAN_C, \
                                cv.THRESH_BINARY, 11, 2)
    th3 = cv.adaptiveThreshold(th1, 255, cv.ADAPTIVE_THRESH_GAUSSIAN_C, \
                                cv.THRESH_BINARY, 11, 2)

    titles = ['Original Image', 'Global Thresholding (v = 127)',
              'Adaptive Mean Thresholding', 'Adaptive Gaussian Thresholding']
    images = [img, th1, th2, th3]
    return titles, images


if __name__ == '__main__':
    img = cv.cvtColor(cv.imread('data/chepai.jpg'), cv.COLOR_BGR2GRAY)
    titles, imgs = adaptive_thresholding(img)
    for title, img in zip(titles, imgs):
        cv.imshow(title, img)
    cv.waitKey()

图像形态学处理

腐蚀(erosion)
original = cv.imread('data/let.png')
original = cv.cvtColor(original, cv.COLOR_BGR2GRAY)
cv.imshow('original', original)
# 定义核元素
kernel = np.ones((5, 5), np.uint8)

# 腐蚀
erosion = cv.erode(original, kernel, iterations=1)
cv.imshow('erosion', erosion)
膨胀(dilation)
# 膨胀
dilation = cv.dilate(original, kernel, iterations = 1)
cv.imshow('dilation', dilation)
开运算(MORPH_OPEN)与闭运算(MORPH_CLOSE)

开运算:先腐蚀后膨胀,用于移除由图像噪音形成的斑点。

闭运算:先膨胀后腐蚀,用来连接被误分为许多小块的对象;

# 开运算  先腐蚀后膨胀
original = cv.imread('data/opening.png')
original = cv.cvtColor(original, cv.COLOR_BGR2GRAY)
opening = cv.morphologyEx(original, cv.MORPH_OPEN, kernel)
cv.imshow('opening1', np.hstack((original, opening)))

# 闭运算  先膨胀后腐蚀
original = cv.imread('data/closing.png')
original = cv.cvtColor(original, cv.COLOR_BGR2GRAY)
closing = cv.morphologyEx(original, cv.MORPH_CLOSE, kernel)
cv.imshow('closing', np.hstack((original, closing)))

图像轮廓处理

https://www.cnblogs.com/mrfri/p/8550328.html
http://ex2tron.wang/opencv-python-contours/
啥叫轮廓
轮廓是一系列相连的点组成的曲线,代表了物体的基本外形。
轮廓与边缘很像。简单的说,轮廓是连续的,边缘并不全都连续。
寻找轮廓

"""
参数2:轮廓的查找方式,一般使用cv2.RETR_TREE,表示提取所有的轮廓并建立轮廓间的层级。
参数3:轮廓的近似方法。比如对于一条直线,我们可以存储该直线的所有像素点,也可以只存储起点和终点。使用cv2.CHAIN_APPROX_SIMPLE就表示用尽可能少的像素点表示轮廓。
"""
image, contours, hierarchy = cv2.findContours(
    thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
边缘检测

物体的边缘检测是物体识别常用的手段。边缘检测常用亮度梯度方法。通过识别亮度梯度变化最大的像素点从而检测出物体的边缘。

常用边缘检测算法相关API:

# 索贝尔边缘识别
# cv.CV_64F:卷积运算使用数据类型为64位浮点型(保证微分的精度)
# 1:是否在水平方向索贝尔偏微分
# 0:是否在垂直方向索贝尔偏微分
# ksize:卷积核为5*5的方阵
cv.Sobel(original, cv.CV_64F, 1, 0, ksize=5)
# 拉普拉斯边缘识别
cv.Laplacian(original, cv.CV_64F)
# Canny边缘识别
# 50:水平方向阈值  240:垂直方向阈值
cv.Canny(original, 50, 240)

案例:

import cv2 as cv

original = cv.imread( '../data/chair.jpg', cv.IMREAD_GRAYSCALE)
cv.imshow('Original', original)
hsobel = cv.Sobel(original, cv.CV_64F, 1, 0, ksize=5)
cv.imshow('H-Sobel', hsobel)
vsobel = cv.Sobel(original, cv.CV_64F, 0, 1, ksize=5)
cv.imshow('V-Sobel', vsobel)
sobel = cv.Sobel(original, cv.CV_64F, 1, 1, ksize=5)
cv.imshow('Sobel', sobel)
laplacian = cv.Laplacian(original, cv.CV_64F)
cv.imshow('Laplacian', laplacian)
canny = cv.Canny(original, 50, 240)
cv.imshow('Canny', canny)
cv.waitKey()

亮度提升

OpenCV提供了直方图均衡化的方式实现亮度提升,更有利于边缘识别与物体识别模型的训练。

OpenCV直方图均衡化相关API:

# 彩色图转为灰度图
gray = cv.cvtColor(original, cv.COLOR_BGR2GRAY)
# 直方图均衡化
equalized_gray = cv.equalizeHist(gray)

案例:

import cv2 as cv

original = cv.imread('../../data/sunrise.jpg')
cv.imshow('Original', original)
gray = cv.cvtColor(original, cv.COLOR_BGR2GRAY)
cv.imshow('Gray', gray)
equalized_gray = cv.equalizeHist(gray)
cv.imshow('Equalized Gray', equalized_gray)
# YUV:亮度,色度,饱和度
yuv = cv.cvtColor(original, cv.COLOR_BGR2YUV)
yuv[..., 0] = cv.equalizeHist(yuv[..., 0])
equalized_color = cv.cvtColor(yuv, cv.COLOR_YUV2BGR)
cv.imshow('Equalized Color', equalized_color)
cv.waitKey()
角点检测

平直棱线的交汇点(颜色梯度方向改变的像素点的位置)

OpenCV提供的角点检测相关API:

gray = cv.cvtColor(original, cv.COLOR_BGR2GRAY)
# Harris角点检测器
# 边缘水平方向、垂直方向颜色值改变超过阈值7、5时即为边缘
# 边缘线方向改变超过阈值0.04弧度即为一个角点。
corners = cv.cornerHarris(gray, 7, 5, 0.04)

案例:

import cv2 as cv

original = cv.imread('../data/box.png')
cv.imshow('Original', original)
gray = cv.cvtColor(original, cv.COLOR_BGR2GRAY)
cv.imshow('Gray', gray)
corners = cv.cornerHarris(gray, 7, 5, 0.04)
mixture = original.copy()
mixture[corners > corners.max() * 0.01] = [0, 0, 255]
cv.imshow('Corner', mixture)
cv.waitKey()

图像识别

特征点检测

常用特征点检测有:STAR特征点检测 / SIFT特征点检测

特征点检测结合了边缘检测与角点检测从而识别出图形的特征点。

STAR特征点检测相关API如下:

import cv2 as cv
# 创建STAR特征点检测器
star = cv.xfeatures2d.StarDetector_create()
# 检测出gray图像所有的特征点
keypoints = star.detect(gray)
# drawKeypoints方法可以把所有的特征点绘制在mixture图像中
cv.drawKeypoints(original, keypoints, mixture,
    			 flags=cv.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
cv.imshow('Mixture', mixture)

案例:

import cv2 as cv
original = cv.imread('../data/table.jpg')
cv.imshow('Original', original)
gray = cv.cvtColor(original, cv.COLOR_BGR2GRAY)
cv.imshow('Gray', gray)
star = cv.xfeatures2d.StarDetector_create()
keypoints = star.detect(gray)
mixture = original.copy()
cv.drawKeypoints(
    original, keypoints, mixture,
    flags=cv.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
cv.imshow('Mixture', mixture)
cv.waitKey()

SIFT特征点检测相关API:

import cv2 as cv

# 创建SIFT特征点检测器
sift = cv.xfeatures2d.SIFT_create()
keypoints = sift.detect(gray)

案例:

import cv2 as cv

original = cv.imread('../data/table.jpg')
cv.imshow('Original', original)
gray = cv.cvtColor(original, cv.COLOR_BGR2GRAY)
cv.imshow('Gray', gray)
sift = cv.xfeatures2d.SIFT_create()
keypoints = sift.detect(gray)
mixture = original.copy()
cv.drawKeypoints(original, keypoints, mixture,
    flags=cv.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
cv.imshow('Mixture', mixture)
cv.waitKey()
特征值矩阵

图像特征值矩阵(描述)记录了图像的特征点以及每个特征点的梯度信息,相似图像的特征值矩阵也相似。这样只要有足够多的样本,就可以基于隐马尔科夫模型进行图像内容的识别。

特征值矩阵相关API:

sift = cv.xfeatures2d.SIFT_create()
keypoints = sift.detect(gray)
_, desc = sift.compute(gray, keypoints)

案例:

import cv2 as cv

import matplotlib.pyplot as mp
original = cv.imread('../data/table.jpg')
cv.imshow('Original', original)
gray = cv.cvtColor(original, cv.COLOR_BGR2GRAY)
cv.imshow('Gray', gray)
sift = cv.xfeatures2d.SIFT_create()
keypoints = sift.detect(gray)
_, desc = sift.compute(gray, keypoints)
print(desc.shape)
mp.matshow(desc, cmap='jet', fignum='Description')
mp.title('Description', fontsize=20)
mp.xlabel('Feature', fontsize=14)
mp.ylabel('Sample', fontsize=14)
mp.tick_params(which='both', top=False, labeltop=False, labelbottom=True, labelsize=10)
mp.show()
物体识别
import os
import numpy as np
import cv2 as cv
import hmmlearn.hmm as hl

def search_files(directory):
    directory = os.path.normpath(directory)

    objects = {}
    for curdir, subdirs, files in os.walk(directory):
        for file in files:
            if(file.endswith('.jpg')):
                label = curdir.split(os.path.sep)[-1]
                if label not in objects:
                    objects[label] = []
                path = os.path.join(curdir, file)
                objects[label].append(path)
    return objects
	
#加载训练集样本数据,训练模型,模型存储
train_objects = search_files('../data/objects/training')
train_x, train_y = [], []
for label, filenames in train_objects.items():
    descs = np.array([])
    for filename in filenames:
        image = cv.imread(filename)
        gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
        #范围缩放,使特征描述矩阵样本数量一致
        h, w = gray.shape[:2]
        f = 200 / min(h, w)
        gray = cv.resize(gray, None, fx=f, fy=f)
        sift = cv.xfeatures2d.SIFT_create()
        keypoints = sift.detect(gray)
        _, desc = sift.compute(gray, keypoints)
        if len(descs) == 0:
            descs = desc
        else:
            descs = np.append(descs, desc, axis=0)
    train_x.append(descs)
    train_y.append(label)
models = {}
for descs, label in zip(train_x, train_y):
    model = hl.GaussianHMM(n_components=4, covariance_type='diag', n_iter=100)
    models[label] = model.fit(descs)


#测试模型
test_objects = search_files('../data/objects/testing')
test_x, test_y = [], []
for label, filenames in test_objects.items():
    descs = np.array([])
    for filename in filenames:
        image = cv.imread(filename)
        gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
        sift = cv.xfeatures2d.SIFT_create()
        keypoints = sift.detect(gray)
        _, desc = sift.compute(gray, keypoints)
        if len(descs) == 0:
            descs = desc
        else:
            descs = np.append(descs, desc, axis=0)
    test_x.append(descs)
    test_y.append(label)

# 遍历所有测试样本  使用model匹配测试样本查看每个模型的匹配分数
for descs, test_label in zip(test_x, test_y):
    for pred_label, model in models.items():
        score = model.score(descs)
        print(test_label, '->', pred_label, score)
OpenCV图像处理技术(Python)——摄像头以及视频处理 OpenCV图像处理技术(Python)——目标追踪 © Fu Xianjun. All Rights Reserved. 文章目录前言学习目标学习内容CSFT追踪算法的使用总结 前言 家人们没错又是我,我又来讲解东西了。 学习目标 1.能够了解目标追踪算法的作用 2.能够熟悉OpenCV追踪算法 3.能够掌握contrib包的安装 4.能够掌握OpenCV追踪算法的使用方法 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 学习内容 CSFT追踪算法的使用 1. 阅读详情

相关推荐

使用OpenCL提升OpenCV图像处理性能 | speed up opencv image processing with OpenCL

本文首发于个人博客https://kezunlin.me/post/59afd8b3/,欢迎阅读最新内容! speed up opencv image processing with OpenCL Guide OpenCL is a framework for writing programs that execute on these heterogenous platforms. The ...

KeZunLin's blog 1264

Python-OpenCV API

在使用opencv的过程中,我们经常需要各种各样的卷积核。如果是正方形的核还好说,但是有时候需要定义椭圆形或者十字形的核,我们就需要用到cv2.getStructuringElement()函数了。alpha通道是一个8位的灰度通道,该通道用256级灰度来记录图像中的透明度复信息,定义透明、不透明和半透明区域,其中黑表示全透明,白表示不透明,灰表示半透明。阈值的作用是根据设定的值处理图像的灰度值,比如灰度大于某个数值像素点保留。求矩阵的最小值,最大值,并得到最大值,最小值的索引。

chengcao123的博客 1460

OpenCV5.x 图像处理之G-API 架构高级设计

G-API 是一个异构框架,它提供了一个统一的 API 来对具有许多支持的后端的图像处理管道进行编程。关键设计理念是保持管道代码本身与平台无关,同时在图形编译(配置)时使用额外参数指定要使用的内核和使用的设备。

源代码杀手的博客 958

几个常用的图片处理和图像识别API

- 支持身份证,驾驶证,银行卡,行驶证等,提供API,信息提取,有免费调用次数,超过次数会收费。) - 支持鸟类品种鉴别,不同种类鸟类检测,鸟类数量统计,提供API。) - 支持相似图像搜索,图像识别匹配,图像识别关键词推荐等内容。) - 支持全帧率直播美白滤镜,实用,提供SDK和Demo。) - 支持图片标注,仅提供iOS版本SDK。

yiyideda的博客 3424

基于EtherCAT的AM402与SV660N、IS620N伺服运动控制实战指南

本文详细介绍了基于EtherCAT总线的汇川AM402 PLC与SV660N、IS620N伺服驱动器构建运动控制系统的完整实战流程。内容涵盖硬件平台搭建、软件组态、关键参数设置、InoProShop编程及调试技巧,旨在帮助工程师快速掌握这一高精度、高响应的工业自动化解决方案。

weixin_29204205的博客 402

USB接口ESD保护电路:深度剖析与选型建议

USB接口在热插拔和频繁使用中极易遭遇静电放电(ESD)冲击,导致芯片损坏或通信异常。本文结合实际电路设计经验,详解TVS二极管、集成ESD防护器件等方案在USB接口上的应用要点,重点分析钳位电压、结电容、IEC 61000-4-2等级等关键参数对信号完整性与防护效果的影响,助你为USB接口匹配高可靠、低干扰的ESD保护方案。

weixin_36289813的博客 510

【python技术】如何把图片做成api

要把图片处理成API,你可以使用一些流行的框架和工具来创建一个能够接收图片并进行处理的API。要创建一个可以随时调用的图片处理API,并将其部署到互联网上,使其可以随时访问,你可以按照以下步骤进行。通过这些步骤,你将创建一个可以随时调用的图片处理API,并将其部署到Heroku。要创建一个能够处理一组图片的API,你可以将之前的示例扩展为接收多张图片并对每张图片进行处理。创建一个简单的Flask应用,并添加一个路由来处理图片上传和处理。创建一个Flask应用,并添加一个路由来处理多张图片上传和处理。

weixin_46453070的博客 1141

ERDAS 2022与ArcGIS共存安装教程:如何避免端口冲突(详细配置步骤)

本文提供了一份详细的ERDAS 2022与ArcGIS共存安装教程,核心在于解决两者因FlexNet许可证服务器导致的端口冲突问题。通过分步指导,包括检查现有端口占用、修改ERDAS许可证文件端口号、配置防火墙及客户端设置,确保两款专业GIS与遥感软件能在同一系统上稳定运行。

weixin_29279047的博客 255

图片处理API

0. 前言 本篇博客主要总结一些图片处理相关的API。 1. 图片处理API 导入图片数据 image_path = "data/xiamu.png" file_contents = tf.read_file(image_path) image_tensor = tf.image.decode_png(contents=file_contents, channels=0) 展示图片 此处将图片展示写成一个函数 在这里插入代码片 ...

weixin_41857483的博客 1650

谈谈SAP顾问的几个发展趋势

大家新年好,今天想聊一下对SAP顾问发展趋势的一些个人见解。过去10多年得益于我国的经济发展,外资不断加大在中国的投资和中国企业的发展,SAP顾问行业得到了很大的发展和壮大。那么未来几年SAP顾问的职业发展到底怎么样呢?

syounger的专栏 2515

YOLOv8 智能交通流量监测完整解决方案

YOLOv8智能交通流量监测系统基于先进的目标检测技术,提供实时车辆识别与统计分析功能。该系统通过虚拟检测线实现多方向车流量统计,支持多种车辆类型分类,并具备数据可视化、异常事件预警等核心功能。完整解决方案包含模型训练、实时检测、批量处理、结果分析等模块,并提供Flask API和Docker两种部署方案。系统采用YOLOv8算法实现高效检测,支持GPU加速,可通过量化、剪枝等技术进一步优化性能,为智能交通管理提供可靠的数据支持和技术保障。

u010117029的博客 118

教你用API插件开发一个AI快速处理图片小助手

通过Huawei Cloud API调用图引擎服务GES,实现用AI快速处理图片的功能。

华为云官方博客 1320

RK3588开发笔记-MIPI-CSI接口视频解码芯片XS9922B调试

Rockchip RK3588 是一款高性能的处理器,支持多种摄像头接口,包括 MIPI(Mobile Industry Processor Interface)接口。MIPI是一种用于移动设备和嵌入式系统中的摄像头、显示器和其他传感器设备的串行接口标准。MIPI是MIPI联盟发起的为移动应用处理器制定的开放标准。CSI-2(Camera Serial Interface 2)是MIPI 联盟定义的另一种高速接口,主要用于摄像模组和处理器之间的连接。

flypig has a dream! 6866

Opencv图像处理学习笔记(1)——基本API操作

Opencv图像处理学习笔记(1)——基本API操作 好久没写学习笔记了,今天我又开了一个新坑,因为作者最近正在学习opencv。所以后面我会不断更新关于Opencv的学习笔记,以供作者今后自查温习所用。 在上一篇博客里,我已经介绍了如何安装Opencv并成功在vs2017上搭建程序运行环境,如有疑惑,可自行查阅作者上一篇博客。 下面我将开始介绍关于Opencv的基本API操作和关于图像处理的一些原理。 一.图像的加载、修改、保存操作 1.加载操作(cv::imread) 函数API: Mat imread

secretboys的博客 1317

【自监督学习完整教程】第 1 章:初识自监督学习

摘要: 自监督学习(SSL)是一种利用无标签数据自动生成伪标签进行模型训练的方法,有效降低了人工标注成本。本文对比了监督学习、无监督学习和SSL的差异,重点阐述了SSL通过设计PretextTasks(如图像旋转预测)从数据中提取深层特征的原理。实践部分以PyTorch实现图像旋转预测任务为例,展示了SSL的训练流程。实验表明,SSL能够学习通用视觉特征,适用于计算机视觉、自然语言处理等领域,尤其在标注数据稀缺的场景中表现优异。

u012133341的博客 260

华为交换机、路由器配置静态路由实现不同网段通信

华为交换机、路由器配置静态路由实现不同网段通信。在主核心交换机上配置vlanif10 192.168.10.254/24,vlanif20 192.168.20.254/24,vlanif100 192.168.100.1/24,PC1:192.168.10.1能ping通PC2:192.168.20.1,也能ping通PC3:192.168.30.1,交换机和路由器使用静态路由。

星如雨落 6464

OpenCV学习——HandVu API分析

本文已搬家至【OpenCV学习】HandVu API分析

gnuhpc的专栏 4015

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

【OpenCV图像处理】1.10形态学基本操作 - 膨胀、腐蚀

形态学基本操作 - 膨胀与腐蚀 从本节课开始,每个API后面都有一些数学公式,有的比较难,不一定完全掌握公式,不过要知道是怎么回事。 形态学操作(morphology operators) 图像形态学操作 – 基于形状的一系列图像处理操作的合集,主要是基于集合论基础上的形态学数学 形态学有四个基本操作:腐蚀、膨胀、开、闭 膨胀与腐蚀是图像处理中最常用的形态学操作手段 膨胀 跟卷积操作...

Donald Su 617

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

OpenCV图像处理实战:镜像旋转、缩放与矫正详解

OpenCV作为计算机视觉领域最流行的开源库之一,提供了丰富的图像处理功能。本文将详细介绍OpenCV中三种常用的图像处理操作:镜像旋转、图像缩放和图像矫正。我们将深入探讨每个操作的原理、应用场景以及相关API的使用方法,帮助读者掌握这些核心技能。镜像旋转:使用cv2.flip()实现快速翻转图像缩放:通过cv2.resize()实现尺寸调整,重点掌握不同插值方法的适用场景图像矫正:包括仿射变换(cv2.warpAffine())和透视变换(cv2.warpPerspective())

wyy202206174248的博客 1578

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【opencv】第6章 图像处理

线性滤波器:线性滤波器经常用于剔除输入信号中不想要的频率或者从许多 频率中选择一个想要的频率。几种常见的线性滤波器如下。低通滤波器:允许低频率通过;高通滤波器:允许高频率通过;带通滤波器:允许一定范围频率通过;带阻滤波器:阻止一定范围频率通过并且允许其他频率通过;全通滤波器:允许所有频率通过,仅仅改变相位关系;陷波滤波器(Band-Stop Filter):阻止一个狭窄频率范围通过,是一种特殊 带阻滤波器。

Antonio915的博客 1378

超实用的10个图像处理的Python库

无论你是刚开始基本的图像处理还是探索高级机器学习模型,这些库都为广泛的图像处理任务提供了必要的工具。

zhang120529的博客 1042

(三) OpenCV仿射变换与透射变换(Affine and Perspective Transform)

图像最基本的变换即仿射变换(Affine Transform)和透射变换(Perspective Transform)。仿射变换是对一个向量空间进行一次线性变换并接上一次平移。透射变换是中心投影的射影变换。 1.仿射变换 仿射变换是线性变换与平移的组合。 1.1原理描述 首先,线性变换是什么?线性变换是满足以下两条性质的变换:1)直线在变换后仍然为直线,不能有所弯曲。2)原点必须保持固定。常见的线性有绕原点的旋转,以原点为中心的缩放,原点不变的错切/推移/剪切(shear)。平移(translation)是

机器人视觉感知 7758

OpenCV学习笔记(十三)之模板匹配

模板匹配 模板匹配就是在整个图像区域匹配到与给定子图像的小块区域 模板匹配首先需要一个模板图像(子图像) 待检测图像 工作方法:在待检测图像上,从左到右,从上到下计算模板图像与待检测图像的匹配度。 匹配算法 计算平方不同(cv::TM_SQDIFF) 归一化计算平方不同(cv::TM_SQDIFF_NORMED) 计算相关性(cv::TM_CCORR) 归一化计算相关性(cv::TM_CCORR_NORMED) 计算相关系数(cv::CCOEFF) 归一化计算相关系数(cv:::CCOEFF_NORM

开发小鸽 429

12- OpenCV:算子(Sobel和Laplance) 和Canny边缘检测 详解

主要介绍Sobel算子和Laplance算子,Canny边缘检测,以及代码实现

bigger_belief的博客 3773

OpenCV图像处理视频教程——入门篇(三)

从这篇起,更多的介绍如何使用,原理会少一点,原理部分会放上其他参考的博客。 文章目录20 霍夫圆检测①原理简介②相关API cv::HoughCircles 20 霍夫圆检测 1 原理简介 2 相关API ①原理简介 对于笛卡尔坐标系中圆的方程为(x−a)2+(y−b)2=r2(x-a)^2+(y-b)^2=r^2(x−a)2+(y−b)2=r2也就是x=a+rcosθx=a+rcos\t...

LY. RoboLab 904

神经网络ml-ANN的改变【opencv2.4.10——>opencv3.4.4】

opencv2.4.10神经网络api的使用: #include <opencv2/ml/ml.hpp>     //创建: CvANN_MLP bp; //下载 bp.load("test.xml") //预测 bp.predict(in,out) /*定义神经网络及参数*/ CvANN_MLP bp; //bp网络 CvANN_MLP_TrainParams params...

stupid_miao的博客 732
上一篇: 人工分类和逻辑分类
下一篇: 你还在为pip安包烦恼?一招解决你的安包问题
AndSonder
博客等级 码龄7年 364粉丝 154原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值