python-3.x - 如何从某个 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 切出面部,我只需要面部部分的像素值而不是完整的图像
解决方案
由于问题本身没有提供原始图像和掩码。我假设一个简单的输入图像和一个带有圆形腔的掩模图像为:
这里的掩模是一个单通道矩阵,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()
推荐阅读
- forms - 使用邮递员从网站表单复制发布请求返回 500 内部服务器错误
- kubernetes - “pkg/mod/k8s.io/client-go@v0.18.5/tools/cache/reflector.go:125:无法列出*v1.Service:未经授权”
- ruby-on-rails - Ruby on Rails 自动双向关系不起作用
- python - joblib 结果因返回值而异
- python - 具有奇怪结构的数据框,偶数列中的变量
- javascript - AXIOS 调用在 React-Native 0.63 中给出网络错误
- wordpress - LatePoint - 1 个位置的 2 个代理
- powershell - 在 PowerShell 中捕获 Sencha CMD 命令
- c++ - 如何识别对方何时使用 PJSIP 接听了电话?
- bash - 抑制信号发生