OpenCV——反向投影back_projection

基于色彩空间,由“sample”反向投影至“target”中。
原图像:
原图
原图HSV色彩空间:
hsv_original
sample hsv图像:
海浪🌊
在这里插入图片描述
结果:
结果
代码部分:

import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt


def back_projection(image1, image2):
    """
    实现直方图反射投影
    :param image1: sample图像
    :param image2: target图像
    """
    hsv1 = cv.cvtColor(image1, cv.COLOR_BGR2HSV)
    hsv2 = cv.cvtColor(image2, cv.COLOR_BGR2HSV)

    cv.imshow("sample", hsv1)
    cv.imshow("target", hsv2)

    hist_sample = cv.calcHist([hsv1], [0, 1], None, [32, 32], [0, 180, 0, 256])
    # 归一化至0-256
    cv.normalize(hist_sample, hist_sample, 0, 255, cv.NORM_MINMAX)
    """
    [hsv2]:被反射图像
    [0, 1]:搜索通道
    hist_sample:采样点(直方图)
    [0, 180, 0, 256]:采样范围
    1:缩放比例,这里为原比例
    """
    dst = cv.calcBackProject([hsv2], [0, 1], hist_sample, [0, 180, 0, 256], 1)
    cv.imshow("backProjection", dst)


def hist2d(image):
    """
    src:输入图像
    channel:需要绘制的通道
    mask:遮罩
    histSize:分组数量
    range:统计范围
    """
    hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV)
    hist = cv.calcHist([hsv], [0, 1], None, [32, 32], [0, 180, 0, 256])
    plt.imshow(hist, interpolation='nearest')
    plt.title("2D Histogram")
    plt.show()


src = cv.imread("data/starry_night.jpg")
cv.imshow("original", src)
# hist2d(src)
sample = cv.imread("data/blue_ocean.jpg")
back_projection(sample, src)


cv.waitKey(0)
cv.destroyAllWindows()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值