-1

如何将图像分成几部分,应用直方图均衡化,从各部分合成图像并显示它我试图想办法将图像分割成定义数量的部分,这意味着图像被分割成多个矩形,当组合形成整个图像。然后对我想应用直方图均衡的每个部分。之后,我希望能够从已应用直方图均衡的第一张图像的部分形成新图像

## so far I know how to apply the histogram equalization to the entire image    

import cv2
import numpy as np
from matplotlib import pyplot as plt
 
## load image
img = cv2.imread('/home/pi/Downloads/bear.bmp',0)
 
## equalize
equ = cv2.equalizeHist(img)

plt.subplot(111),plt.imshow(equ, cmap = "gray"),plt.title('Equalized')
plt.xticks([]), plt.yticks([])
plt.show()
4

2 回答 2

2

由于您已经弄清楚如何对图像进行直方图均衡化,因此剩下的问题是拆分原始图像,然后将这些片段合并回来。

OpenCV 相当不错,它为您提供了感兴趣区域 (ROI) 的概念,它是图像的一部分(定义为矩形)。出于所有实际目的,ROI 充当图像,但如果您修改它,原始图像也会被修改。

因此,您必须提取您感兴趣的所有 ROI 并对它们应用直方图均衡化。合并是隐式处理的,因为 ROI 是图像本身的一部分。

在此处此处查看有关 ROI 的更多信息。

于 2019-03-31T16:47:24.030 回答
1

试试这个:

import cv2
import numpy as np

img = cv2.imread("1.jpg")
(h,w,c) = img.shape
gray_img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

parts = []
step_x = 3
step_y = 3
eqs = []
eq_img = np.zeros_like(gray_img)

for x in range(step_x):
    for y in range(step_y):
        xratio1 = x/step_x
        xratio2 = (x+1)/step_x
        yratio1 = y/step_y
        yratio2 = (y+1)/step_y
        part = gray_img[int(yratio1*h):int(yratio2*h),int(xratio1*w):int(xratio2*w)].copy()
        parts.append(part)

        cv2.imshow("x = {0}, y = {1}".format(x,y),part)

        eq = cv2.equalizeHist(part)
        eqs.append(eq)
        eq_img[int(yratio1*h):int(yratio2*h),int(xratio1*w):int(xratio2*w)] = eq

cv2.imshow("eq_img",eq_img)
cv2.waitKey(0)

在此处输入图像描述 在此处输入图像描述

于 2019-04-01T02:14:09.627 回答