OpenCV+Python简单实践之硬币检测以及条形码检测

2023-11-02

一、简单图片格式

1.位图

把一张彩色图片分别保存为 32位、16位彩色和256色、16色、单色的位图
在这里插入图片描述notepad打开位图
img1.bmp单色位图
文件头如图
在这里插入图片描述
img16.bmp16色位图
在这里插入图片描述img256.bmp256色位图
在这里插入图片描述img16rgb16位彩图

在这里插入图片描述img32rgb32位彩图

在这里插入图片描述位图大小计算公式为;长×高×位深度
比如下面的图,可以计算得大小约为(220×220×16)/8/1024=94.53125kb,不包括文件头等其他信息。
在这里插入图片描述0~1 两个字节为文件类型,0x4d42为固定BM
2~5 四个字节为文件大小,0x184e,即6222
6~9 四个字节为保留字段,全0
a~d 四个字节为从文件头到实际的位图数据的偏移字节数
12~15 四个字节表示图片宽度,0xdc为220
16~19 四个字节表示图片高度,0xdc为220
1a~1b 两个字节,恒定为0x1
1c~1d 两个字节表示像素占的比特,这里为0x1即两种颜色,16色为0x4即16种颜色,256色为0x8即256种颜色
1e~21 四个字节表示图片是否压缩,0x0表示不压缩
22~25 四个表示图像大小,0x1810为6160
26~29 四个字节表示水平分辨率
2a~2d 四个字节表示垂直分辨率
23~31 四个字节表示实际使用的颜色索引数
32~35 四个字节表示重要的颜色索引数

可以发现文件头一共占40个字节,为十六进制。
对于不同的图片,文件大小、长、宽、像素占比都不同。

2.文件压缩比

分别保存jpg,png,gif,bmp四种格式的图片,原图为24位img.bmp,大小为468kb。
经过jpg转换后大小变为22.6kb,压缩率在5%
经过gif转换后大小变为10.9kb,压缩率在3%
经过png转换后大小变为74.1kb,压缩率在16%
经过256色位图转换后大小变为157kb,压缩率在36%
当然,这里的图片空白部分偏多,压缩率很低。
在这里插入图片描述

二、用奇异值分解(SVD)对一张图片进行特征值提取(降维)处理

1.代码

import numpy as np
import os
from PIL import Image
import matplotlib.pyplot as plt
import matplotlib as mpl
from pprint import pprint


def restore1(sigma, u, v, K):  # 奇异值、左特征向量、右特征向量
    m = len(u)
    n = len(v[0])
    a = np.zeros((m, n))
    for k in range(K):
        uk = u[:, k].reshape(m, 1)
        vk = v[k].reshape(1, n)
        a += sigma[k] * np.dot(uk, vk)
    a[a < 0] = 0
    a[a > 255] = 255
    # a = a.clip(0, 255)
    return np.rint(a).astype('uint8')


def restore2(sigma, u, v, K):  # 奇异值、左特征向量、右特征向量
    m = len(u)
    n = len(v[0])
    a = np.zeros((m, n))
    for k in range(K+1):
        for i in range(m):
            a[i] += sigma[k] * u[i][k] * v[k]
    a[a < 0] = 0
    a[a > 255] = 255
    return np.rint(a).astype('uint8')


if __name__ == "__main__":
    A = Image.open("./lena.jpg", 'r')
    print(A)
    output_path = r'./SVD_Output'
    if not os.path.exists(output_path):
        os.mkdir(output_path)
    a = np.array(A)
    print(a.shape)
    K = 50
    u_r, sigma_r, v_r = np.linalg.svd(a[:, :, 0])
    u_g, sigma_g, v_g = np.linalg.svd(a[:, :, 1])
    u_b, sigma_b, v_b = np.linalg.svd(a[:, :, 2])
    plt.figure(figsize=(11, 9), facecolor='w')
    mpl.rcParams['font.sans-serif'] = ['simHei']
    mpl.rcParams['axes.unicode_minus'] = False
    for k in range(1, K+1):
        print(k)
        R = restore1(sigma_r, u_r, v_r, k)
        G = restore1(sigma_g, u_g, v_g, k)
        B = restore1(sigma_b, u_b, v_b, k)
        I = np.stack((R, G, B), axis=2)
        Image.fromarray(I).save('%s\\svd_%d.png' % (output_path, k))
        if k <= 12:
            plt.subplot(3, 4, k)
            plt.imshow(I)
            plt.axis('off')
            plt.title('奇异值个数:%d' % k)
    plt.suptitle('SVD与图像分解', fontsize=20)
    plt.tight_layout()
    # plt.subplots_adjust(top=0.9)
    plt.show()

2.效果

随着奇异值的减少图片变得模糊

在这里插入图片描述

三、采用图像的开闭运算(腐蚀-膨胀),检测出2个样本图像中硬币、细胞的个数

1.硬币检测代码

读取图片

#读取图片
src = cv2.imread("img_1.png")
img = src.copy()

原图
在这里插入图片描述

转为灰度图片

#灰度
img_1 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

在这里插入图片描述

图片二值化

#二值化
ret, img_2 = cv2.threshold(img_1, 127, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)

在这里插入图片描述

腐蚀

腐蚀主要为了把每个硬币区分开。过大会造成缺失,过低会无法区分开。参数可以自己设置以达到合适。

#腐蚀
kernel = np.ones((25, 25), int)
img_3 = cv2.erode(img_2, kernel, iterations=1)

在这里插入图片描述

膨胀

膨胀到合适的值,这样每一个白色区域就是一个硬币。

#膨胀
kernel = np.ones((10, 10), int)
img_4 = cv2.dilate(img_3, kernel, iterations=1)

在这里插入图片描述

找到硬币中心

#找到硬币中心
contours, hierarchy = cv2.findContours(img_4, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)[-2:]



标识硬币

#标识硬币
cv2.drawContours(img, contours, -1, (0, 0, 255), 5)

显示结果

#显示图片
cv2.putText(img, "count:{}".format(len(contours)), (0, 30), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (255, 0, 0), 3)
cv2.putText(src, "src", (0, 30), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (255, 0, 0), 3)
cv2.putText(img_1, "gray", (0, 30), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (255, 0, 0), 3)
cv2.putText(img_2, "thresh", (0, 30), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (255, 0, 0), 3)
cv2.putText(img_3, "erode", (0, 30), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (255, 0, 0), 3)
cv2.putText(img_4, "dilate", (0, 30), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (255, 0, 0), 3)
imgStack = stackImages(0.7, ([src, img_1, img_2], [img_3, img_4, img]))
cv2.imshow("imgStack", imgStack)
cv2.waitKey(0)

最终结果

在这里插入图片描述

源码

import cv2
import numpy as np

def stackImages(scale, imgArray):
    """
        将多张图像压入同一个窗口显示
        :param scale:float类型,输出图像显示百分比,控制缩放比例,0.5=图像分辨率缩小一半
        :param imgArray:元组嵌套列表,需要排列的图像矩阵
        :return:输出图像
    """
    rows = len(imgArray)
    cols = len(imgArray[0])
    rowsAvailable = isinstance(imgArray[0], list)
    width = imgArray[0][0].shape[1]
    height = imgArray[0][0].shape[0]
    if rowsAvailable:
        for x in range(0, rows):
            for y in range(0, cols):
                if imgArray[x][y].shape[:2] == imgArray[0][0].shape[:2]:
                    imgArray[x][y] = cv2.resize(imgArray[x][y], (0, 0), None, scale, scale)
                else:
                    imgArray[x][y] = cv2.resize(imgArray[x][y], (imgArray[0][0].shape[1], imgArray[0][0].shape[0]),
                                                None, scale, scale)
                if len(imgArray[x][y].shape) == 2: imgArray[x][y] = cv2.cvtColor(imgArray[x][y], cv2.COLOR_GRAY2BGR)
        imageBlank = np.zeros((height, width, 3), np.uint8)
        hor = [imageBlank] * rows
        hor_con = [imageBlank] * rows
        for x in range(0, rows):
            hor[x] = np.hstack(imgArray[x])
        ver = np.vstack(hor)
    else:
        for x in range(0, rows):
            if imgArray[x].shape[:2] == imgArray[0].shape[:2]:
                imgArray[x] = cv2.resize(imgArray[x], (0, 0), None, scale, scale)
            else:
                imgArray[x] = cv2.resize(imgArray[x], (imgArray[0].shape[1], imgArray[0].shape[0]), None, scale, scale)
            if len(imgArray[x].shape) == 2: imgArray[x] = cv2.cvtColor(imgArray[x], cv2.COLOR_GRAY2BGR)
        hor = np.hstack(imgArray)
        ver = hor
    return ver


#读取图片
src = cv2.imread("img_1.png")
img = src.copy()

#灰度
img_1 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

#二值化
ret, img_2 = cv2.threshold(img_1, 127, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)

#腐蚀
kernel = np.ones((20, 20), int)
img_3 = cv2.erode(img_2, kernel, iterations=1)

#膨胀
kernel = np.ones((3, 3), int)
img_4 = cv2.dilate(img_3, kernel, iterations=1)

#找到硬币中心
contours, hierarchy = cv2.findContours(img_4, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)[-2:]

#标识硬币
cv2.drawContours(img, contours, -1, (0, 0, 255), 5)

#显示图片
cv2.putText(img, "count:{}".format(len(contours)), (0, 30), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (255, 0, 0), 3)
cv2.putText(src, "src", (0, 30), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (255, 0, 0), 3)
cv2.putText(img_1, "gray", (0, 30), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (255, 0, 0), 3)
cv2.putText(img_2, "thresh", (0, 30), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (255, 0, 0), 3)
cv2.putText(img_3, "erode", (0, 30), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (255, 0, 0), 3)
cv2.putText(img_4, "dilate", (0, 30), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (255, 0, 0), 3)
imgStack = stackImages(1, ([src, img_1, img_2], [img_3, img_4, img]))
cv2.imshow("imgStack", imgStack)
cv2.waitKey(0)

2.细胞检测

和硬币检测原理和过程一致

四、 采用图像梯度、开闭、轮廓运算等,对图片中的条形码进行定位提取;再调用条码库获得条码字符

读取图片

#读取图片
src = cv2.imread("img_3.jpg")
img = src.copy()

转为灰度图片

#灰度
img_1 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

在这里插入图片描述

高斯滤波处理

#高斯滤波
img_2 = cv2.GaussianBlur(img_1, (5, 5), 1)

在这里插入图片描述

Sobel算子计算梯度差

#Sobel算子
sobel_x = cv2.Sobel(img_2, cv2.CV_64F, 1, 0, ksize=3)
sobel_y = cv2.Sobel(img_2, cv2.CV_64F, 0, 1, ksize=3)
sobel_x = cv2.convertScaleAbs(sobel_x)
sobel_y = cv2.convertScaleAbs(sobel_y)
img_3 = cv2.addWeighted(sobel_x, 0.5, sobel_y, 0.5, 0)

在这里插入图片描述

均值方波消除高频噪声

#均值方波
img_4 = cv2.blur(img_3, (5, 5))

在这里插入图片描述

二值化

#二值化
ret, img_5 = cv2.threshold(img_4, 127, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)

在这里插入图片描述

闭运算填充空隙


#闭运算
kernel = np.ones((100, 100), int)
img_6 = cv2.morphologyEx(img_5, cv2.MORPH_CLOSE, kernel)

在这里插入图片描述

开运算得到最终区域

#开运算
kernel = np.ones((200, 200), int)
img_7 = cv2.morphologyEx(img_6, cv2.MORPH_OPEN, kernel)

在这里插入图片描述

绘制结果

#绘制条形码区域
contours = cv2.findContours(img_7, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
contours = imutils.grab_contours(contours)
c = sorted(contours, key = cv2.contourArea, reverse = True)[0]
rect = cv2.minAreaRect(c)
box = cv2.cv.BoxPoints(rect) if imutils.is_cv2() else cv2.boxPoints(rect)
box = np.int0(box)
cv2.drawContours(img, [box], -1, (0,255,0), 20)

#显示图片信息
cv2.putText(img, "results", (200, 200), cv2.FONT_HERSHEY_SIMPLEX, 10.0, (255, 0, 0), 30)
cv2.putText(img_1, "gray", (200, 200), cv2.FONT_HERSHEY_SIMPLEX, 10.0, (255, 0, 0), 30)
cv2.putText(img_2, "GaussianBlur",(200, 200), cv2.FONT_HERSHEY_SIMPLEX, 10.0, (255, 0, 0), 30)
cv2.putText(img_3, "Sobel", (200, 200), cv2.FONT_HERSHEY_SIMPLEX, 10.0, (255, 0, 0), 30)
cv2.putText(img_4, "blur", (200, 200), cv2.FONT_HERSHEY_SIMPLEX, 10.0, (255, 0, 0), 30)
cv2.putText(img_5, "threshold", (200, 200), cv2.FONT_HERSHEY_SIMPLEX, 10.0, (255, 0, 0), 30)
cv2.putText(img_6, "close", (200, 200), cv2.FONT_HERSHEY_SIMPLEX, 10.0, (255, 0, 0), 30)
cv2.putText(img_7, "open", (200, 200), cv2.FONT_HERSHEY_SIMPLEX, 10.0, (255, 0, 0), 30)

#输出条形码
barcodes = pyzbar.decode(src)
for barcode in barcodes:
    barcodeData = barcode.data.decode("utf-8")
    cv2.putText(img, barcodeData, (200, 600), cv2.FONT_HERSHEY_SIMPLEX, 5.0, (0, 255, 0), 30)

#显示所有图片
imgStack = stackImages(0.1, ([img_1, img_2,img_3,img_4],[img_5,img_6,img_7,img]))
cv2.imshow("imgStack", imgStack)
cv2.waitKey(0)

结果

在这里插入图片描述

源码

import cv2
import numpy as np
import imutils
from pyzbar import pyzbar
def stackImages(scale, imgArray):
    """
        将多张图像压入同一个窗口显示
        :param scale:float类型,输出图像显示百分比,控制缩放比例,0.5=图像分辨率缩小一半
        :param imgArray:元组嵌套列表,需要排列的图像矩阵
        :return:输出图像
    """
    rows = len(imgArray)
    cols = len(imgArray[0])
    rowsAvailable = isinstance(imgArray[0], list)
    width = imgArray[0][0].shape[1]
    height = imgArray[0][0].shape[0]
    if rowsAvailable:
        for x in range(0, rows):
            for y in range(0, cols):
                if imgArray[x][y].shape[:2] == imgArray[0][0].shape[:2]:
                    imgArray[x][y] = cv2.resize(imgArray[x][y], (0, 0), None, scale, scale)
                else:
                    imgArray[x][y] = cv2.resize(imgArray[x][y], (imgArray[0][0].shape[1], imgArray[0][0].shape[0]),
                                                None, scale, scale)
                if len(imgArray[x][y].shape) == 2: imgArray[x][y] = cv2.cvtColor(imgArray[x][y], cv2.COLOR_GRAY2BGR)
        imageBlank = np.zeros((height, width, 3), np.uint8)
        hor = [imageBlank] * rows
        hor_con = [imageBlank] * rows
        for x in range(0, rows):
            hor[x] = np.hstack(imgArray[x])
        ver = np.vstack(hor)
    else:
        for x in range(0, rows):
            if imgArray[x].shape[:2] == imgArray[0].shape[:2]:
                imgArray[x] = cv2.resize(imgArray[x], (0, 0), None, scale, scale)
            else:
                imgArray[x] = cv2.resize(imgArray[x], (imgArray[0].shape[1], imgArray[0].shape[0]), None, scale, scale)
            if len(imgArray[x].shape) == 2: imgArray[x] = cv2.cvtColor(imgArray[x], cv2.COLOR_GRAY2BGR)
        hor = np.hstack(imgArray)
        ver = hor
    return ver


#读取图片
src = cv2.imread("img_3.jpg")
img = src.copy()

#灰度
img_1 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

#高斯滤波
img_2 = cv2.GaussianBlur(img_1, (5, 5), 1)


#Sobel算子
sobel_x = cv2.Sobel(img_2, cv2.CV_64F, 1, 0, ksize=3)
sobel_y = cv2.Sobel(img_2, cv2.CV_64F, 0, 1, ksize=3)
sobel_x = cv2.convertScaleAbs(sobel_x)
sobel_y = cv2.convertScaleAbs(sobel_y)
img_3 = cv2.addWeighted(sobel_x, 0.5, sobel_y, 0.5, 0)

#均值方波
img_4 = cv2.blur(img_3, (5, 5))

#二值化
ret, img_5 = cv2.threshold(img_4, 127, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)

#闭运算
kernel = np.ones((100, 100), int)
img_6 = cv2.morphologyEx(img_5, cv2.MORPH_CLOSE, kernel)

#开运算
kernel = np.ones((200, 200), int)
img_7 = cv2.morphologyEx(img_6, cv2.MORPH_OPEN, kernel)

#绘制条形码区域
contours = cv2.findContours(img_7, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
contours = imutils.grab_contours(contours)
c = sorted(contours, key = cv2.contourArea, reverse = True)[0]
rect = cv2.minAreaRect(c)
box = cv2.cv.BoxPoints(rect) if imutils.is_cv2() else cv2.boxPoints(rect)
box = np.int0(box)
cv2.drawContours(img, [box], -1, (0,255,0), 20)

#显示图片信息
cv2.putText(img, "results", (200, 200), cv2.FONT_HERSHEY_SIMPLEX, 10.0, (255, 0, 0), 30)
cv2.putText(img_1, "gray", (200, 200), cv2.FONT_HERSHEY_SIMPLEX, 10.0, (255, 0, 0), 30)
cv2.putText(img_2, "GaussianBlur",(200, 200), cv2.FONT_HERSHEY_SIMPLEX, 10.0, (255, 0, 0), 30)
cv2.putText(img_3, "Sobel", (200, 200), cv2.FONT_HERSHEY_SIMPLEX, 10.0, (255, 0, 0), 30)
cv2.putText(img_4, "blur", (200, 200), cv2.FONT_HERSHEY_SIMPLEX, 10.0, (255, 0, 0), 30)
cv2.putText(img_5, "threshold", (200, 200), cv2.FONT_HERSHEY_SIMPLEX, 10.0, (255, 0, 0), 30)
cv2.putText(img_6, "close", (200, 200), cv2.FONT_HERSHEY_SIMPLEX, 10.0, (255, 0, 0), 30)
cv2.putText(img_7, "open", (200, 200), cv2.FONT_HERSHEY_SIMPLEX, 10.0, (255, 0, 0), 30)

#输出条形码
barcodes = pyzbar.decode(src)
for barcode in barcodes:
    barcodeData = barcode.data.decode("utf-8")
    cv2.putText(img, barcodeData, (200, 600), cv2.FONT_HERSHEY_SIMPLEX, 5.0, (0, 255, 0), 30)

#显示所有图片
imgStack = stackImages(0.1, ([img_1, img_2,img_3,img_4],[img_5,img_6,img_7,img]))
cv2.imshow("imgStack", imgStack)
cv2.waitKey(0)


四、总结

学会使用OpenCV对于处理图像有很大的帮助

五、参考

https://blog.csdn.net/qq_43279579/article/details/120782545
https://blog.csdn.net/qq_43279579/article/details/120766454
https://blog.csdn.net/qq_43279579/article/details/120785076
https://blog.csdn.net/weixin_45602979/article/details/108831760
https://blog.csdn.net/yl_best/article/details/90666104
https://blog.csdn.net/qq_47281915/article/details/121640725?spm=1001.2014.3001.5501

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenCV+Python简单实践之硬币检测以及条形码检测 的相关文章

  • Python 中的 Lanczos 插值与 2D 图像

    我尝试重新缩放 2D 图像 灰度 图像大小为 256x256 所需输出为 224x224 像素值范围从 0 到 1300 我尝试了两种使用 Lanczos 插值来重新调整它们的方法 首先使用PIL图像 import numpy as np
  • Python 的键盘中断不会中止 Rust 函数 (PyO3)

    我有一个使用 PyO3 用 Rust 编写的 Python 库 它涉及一些昂贵的计算 单个函数调用最多需要 10 分钟 从 Python 调用时如何中止执行 Ctrl C 好像只有执行结束后才会处理 所以本质上没什么用 最小可重现示例 Ca
  • Python(Selenium):如何通过登录重定向/组织登录登录网站

    我不是专业程序员 所以请原谅任何愚蠢的错误 我正在做一些研究 我正在尝试使用 Selenium 登录数据库来搜索大约 1000 个术语 我有两个问题 1 重定向到组织登录页面后如何使用 Selenium 登录 2 如何检索数据库 在我解决
  • 如何在 Python 中检索 for 循环中的剩余项目?

    我有一个简单的 for 循环迭代项目列表 在某些时候 我知道它会破裂 我该如何退回剩余的物品 for i in a b c d e f g try some func i except return remaining items if s
  • SQLALchemy .query:类“Car”的未解析属性引用“query”

    我有一个这里已经提到的问题https youtrack jetbrains com issue PY 44557 https youtrack jetbrains com issue PY 44557 但我还没有找到解决方案 我使用 Pyt
  • 如何加速Python中的N维区间树?

    考虑以下问题 给定一组n间隔和一组m浮点数 对于每个浮点数 确定包含该浮点数的区间子集 这个问题已经通过构建一个解决区间树 https en wikipedia org wiki Interval tree 或称为范围树或线段树 已经针对一
  • BeautifulSoup 中的嵌套标签 - Python

    我在网站和 stackoverflow 上查看了许多示例 但找不到解决我的问题的通用解决方案 我正在处理一个非常混乱的网站 我想抓取一些数据 标记看起来像这样 table tbody tr tr tr td td td table tr t
  • 在Python中获取文件描述符的位置

    比如说 我有一个原始数字文件描述符 我需要根据它获取文件中的当前位置 import os psutil some code that works with file lp lib open path to file p psutil Pro
  • IO 密集型任务中的 Python 多线程

    建议仅在 IO 密集型任务中使用 Python 多线程 因为 Python 有一个全局解释器锁 GIL 只允许一个线程持有 Python 解释器的控制权 然而 多线程对于 IO 密集型操作有意义吗 https stackoverflow c
  • 在f字符串中转义字符[重复]

    这个问题在这里已经有答案了 我遇到了以下问题f string gt gt gt a hello how to print hello gt gt gt f a a gt gt gt f a File
  • 使用 \r 并打印一些文本后如何清除控制台中的一行?

    对于我当前的项目 有一些代码很慢并且我无法使其更快 为了获得一些关于已完成 必须完成多少的反馈 我创建了一个进度片段 您可以在下面看到 当你看到最后一行时 sys stdout write r100 80 n I use 80覆盖最终剩余的
  • Jupyter Notebook 内核一直很忙

    我已经安装了 anaconda 并且 python 在 Spyder IPython 等中工作正常 但是我无法运行 python 笔记本 内核被创建 它也连接 但它始终显示黑圈忙碌符号 防火墙或防病毒软件没有问题 我尝试过禁用两者 我也无法
  • 向 Altair 图表添加背景实心填充

    I like Altair a lot for making graphs in Python As a tribute I wanted to regenerate the Economist graph s in Mistakes we
  • 每个 X 具有多个 Y 值的 Python 散点图

    我正在尝试使用 Python 创建一个散点图 其中包含两个 X 类别 cat1 cat2 每个类别都有多个 Y 值 如果每个 X 值的 Y 值的数量相同 我可以使用以下代码使其工作 import numpy as np import mat
  • 对年龄列进行分组/分类

    我有一个数据框说df有一个柱子 Ages gt gt gt df Age 0 22 1 38 2 26 3 35 4 35 5 1 6 54 我想对这个年龄段进行分组并创建一个像这样的新专栏 If age gt 0 age lt 2 the
  • 有人用过 Dabo 做过中型项目吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我们正处于一个新的 ERP 风格的客户端 服务器应用程序的开始阶段 该应用程序是作为 Python 富客户端开发的 我们目前正在评估 Dabo
  • Scrapy:如何使用元在方法之间传递项目

    我是 scrapy 和 python 的新手 我试图将 parse quotes 中的项目 item author 传递给下一个解析方法 parse bio 我尝试了 request meta 和 response meta 方法 如 sc
  • Python 类继承 - 诡异的动作

    我观察到类继承有一个奇怪的效果 对于我正在处理的项目 我正在创建一个类来充当另一个模块的类的包装器 我正在使用第 3 方 aeidon 模块 用于操作字幕文件 但问题可能不太具体 以下是您通常如何使用该模块 project aeidon P
  • 如何使用 Pycharm 安装 tkinter? [复制]

    这个问题在这里已经有答案了 I used sudo apt get install python3 6 tk而且效果很好 如果我在终端中打开 python Tkinter 就可以工作 但我无法将其安装在我的 Pycharm 项目上 pip
  • Statsmodels.formula.api OLS不显示截距的统计值

    我正在运行以下源代码 import statsmodels formula api as sm Add one column of ones for the intercept term X np append arr np ones 50

随机推荐

  • java中 io和nio的区别

    一 概念 1 基本概念 1 i o inputstream outputstream 整个Java IO体系都是基于字符流 InputStream OutputStream 和 字节流 Reader Writer 作为基类 根据不同的数据载
  • 通俗易懂的 OpenGL ES 3.0(一)入门必备知识!!

    前言 opengl的入门是个难点 因为在绘制出图形之前 你必须要学习一大堆的概念 以及部分图形知识 以至于在代码中不迷路 v 接下来就通俗的讲解下部分概念知识 希望大家取其精华去其糟粕 温馨提示 blog阅读体验会好点 https lais
  • C++ STL中哈希表 hash_map从头到尾详细介绍

    目录 0 为什么需要hash map 用过map吧 map提供一个很常用的功能 那就是提供key value的存储和查找功能 例如 我要记录一个人名和相应的存储 而且随时增加 要快速查找和修改 岳不群 华山派掌门人 人称君子剑 张三丰 武当
  • 前端艺术之毛玻璃-倾斜-日历

    前端艺术之毛玻璃 倾斜 日历 描述 项目 效果 index html index css 描述 项目 描述 开发语言 HTML JavaScript CSS 库 dyCalendarJS vanilla tilt Edge 108 0 14
  • 反反调试:app 检测 data/local/tmp 目录绕过手段

    最近在逆向某app时遇到一个非常恶心的反调试手段 只要是maps和fd中存在 data local tmp 甚至只有tmp的字段 app就给kill掉 因为这个目录对于安卓逆向工作来说 是一个比较敏感的目录 hluda server和fri
  • 【DL】第6章 问题匹配

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • SpringBoot打成可执行的jar包

    当你使用springBoot进行打包的时候 这篇经验会帮助到你的 操作 1 spring boot maven plugin 插件 首先要明白一个spring boot maven plugin 插件的作用 pom文件中添加了 org sp
  • [管理与领导-67]:IT基层管理者 - 辅助技能 - 4- 职业发展规划 - 评估你与公司的八字是否相合

    目录 前言 一 概述 二 八字相合的步骤 2 1 企业文化是否相合 2 2 1 企业文化对职业选择的意义 2 2 2 个人与企业三观不合的结果 2 2 3 什么样的企业文化的公司不能加入 2 2 公司的发展前景 2 3 公司所处行业发展 2
  • ChatGPT对我们的影响-ChatGPT能给我们带来什么

    ChatGPT日常应用 ChatGPT是一种应用广泛的自然语言处理算法 其可以应用于多种日常场景 以下是一些ChatGPT的日常应用 聊天机器人 ChatGPT可用于构建聊天机器人 通过与用户进行自然语言交互来提供个性化的服务和支持 新闻稿
  • 基于Spark 的电影推荐系统

    来源 我是码农 转载请保留出处和链接 本文链接 http www 54manong com id 1215 基于大数据的电影推荐系统主要分为两部分 基于历史数据的离线处理和基于实时流的实时处理 离线处理是基于历史数据 实时处理是结合历史数据
  • 翻译:miceforest:使用Python中的随机森林进行快速插补

    原文 miceforest Fast Imputation with Random Forests in Python miceforest 包实现随机森林的链式方程式 MICE 多重插补 具有快速 内存利用率高的特征 无需太多设置即可插入
  • kettle中判断输入的数据是不是 偶然错误

    参照表一个常见的用途就是做数据的查询和检验 提供一个输入字段 如果输入字段里的值没有匹配上 就给对应的数据行做一个错误标志 下面使用城市和邮政编码查询做个例子 演示如何使用计算器步骤和查询步骤来判断地址和邮政编码是否匹配 完整的转换如下图
  • iOS AVPlayer使用总结

    目录 1 AVPlayer的创建 2 AVPlayer的配置 AVPlayerLayer 3 AVPlayerItem 加载视频资源 4 播放控制 5 监听播放状态 1 AVPlayer的创建 AVPlayer player AVPlaye
  • [Anaconda] Jupyter Notebook中使用Python虚拟环境

    进入虚拟环境后安装ipykernel conda install ipykernel 运行ipykernel安装指令 python m ipykernel install name tf365 python m ipykernel inst
  • 【虚拟机】vmware虚拟机创建 centos7系统配置

    目录 前言 创建虚拟机 进入虚拟机 前言 vmware虚拟机网上可以下载 本节主要记录一下 如何创建虚拟机 并安装centos操作系统 然后运行虚拟机 创建虚拟机 打开VMware Workstation 新建虚拟机 我们选择典型 推荐 之
  • Error: Cannot find module 'chalk'

    问题描述 Vue文件打包 npm install npm run build 然后问题如下 然后网上搜索答案 有说删除掉node modules 再重新执行npm install 也有说执行npm install chalk的 都试了 结果
  • gtest中TEST和TEST_F使用的区别

    首先 include
  • 【Vue2.0源码学习】模板编译篇-模板解析阶段(整体运行流程)

    文章目录 1 前言 2 什么是模板编译 3 整体渲染流程 4 模板编译内部流程 4 1 抽象语法树AST 4 2 具体流程 5 小总结 6 整体流程 7 回到源码 8 总结 1 前言 在前几篇文章中 我们介绍了Vue中的虚拟DOM以及虚拟D
  • 【数据增强】CutMix: Regularization Strategy to Train Strong Classifiers with Localizable Features

    x是图片 y是图片对应的label 通过合成两张训练图片a和b 生成新的训练样本 M是二值mask 大小与原图片一致 lam来源于Beta alp alp 分布 Alp设置为1 lam取自均匀分布 0 1 设置bbox B 它的坐标是 裁剪
  • OpenCV+Python简单实践之硬币检测以及条形码检测

    目录标题 一 简单图片格式 1 位图 2 文件压缩比 二 用奇异值分解 SVD 对一张图片进行特征值提取 降维 处理 1 代码 2 效果 三 采用图像的开闭运算 腐蚀 膨胀 检测出2个样本图像中硬币 细胞的个数 1 硬币检测代码 读取图片