首页 > 解决方案 > 如何从某个 ROI 中提取所有像素值,然后将其存储为 CSV 文件,然后再次使用该 csv 文件取回该 ROI

问题描述

应用蒙版 原始图像后

import cv2
import dlib
import numpy as np
img = cv2.imread("Aayush.jpg")
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
msk = np.zeros_like(img_gray)
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")
faces = detector(img_gray)
for face in faces:
  landmarks = predictor(img_gray, face)
  lp = []
  for n in range(0,68):
    x = landmarks.part(n).x
    y = landmarks.part(n).y
    lp.append((x,y))
    p = np.array(lp, np.int32)
    #cv2.circle(img, (x,y), 3, (0, 0, 255), -1)
convexhull = cv2.convexHull(p)
#cv2.polylines(img, [convexhull], True, (255,0,0), 3)
cv2.fillConvexPoly(msk, convexhull, 255)
img1 = cv2.bitwise_and(img, img, mask = msk)

img1 包含一个完整的黑色图像,从 img 切出面部,我只需要面部部分的像素值而不是完整的图像

标签: python-3.xopencvimage-processingface-detectiondlib

解决方案


由于问题本身没有提供原始图像和掩码。我假设一个简单的输入图像和一个带有圆形腔的掩模图像为:

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

这里的掩模是一个单通道矩阵,255在中心空腔中的值为 。要仅获取腔内的像素信息,您可以使用以下 numpy 操作:

pixel_info = original_image[mask == 255]
# You may need to convert the numpy array to Python list.
pixel_info_list = pixel_info.tolist()

现在您可以将其序列化为list您想要的任何格式(在本例中为csv。)

完整代码:

import cv2
import numpy as np

original_image = cv2.imread("/path/to/lena.png")
mask = np.zeros(original_image.shape[:2], dtype=original_image.dtype)

mask = cv2.circle(mask, (256, 256), 100, [255], -1)

pixel_info = original_image[mask == 255]
pixel_info_list = pixel_info.tolist()

推荐阅读