这个笔记本是教程中的部分方法
Dzyabura, El Kihal and Peres (2020), “Image Analytics in Marketing”, in The Handbook of Market Research, Ch 14, Editors: Christian Homburg, Martin Klarmann, Arnd Vomberg. Springer, 2021.
安装
代码是用 Python 编写的。 用于编程和运行代码的理想界面是通过 Anaconda 的 Jupyter Notebook。
除了标准 Anaconda 库之外,还需要安装几个额外的库。 我们在代码中标记它们。
!pip3 install opencv-contrib-python==4.5.5.64
!pip3 install opencv-python==4.5.5.62
!pip3 install scikit-image==0.18.3
import numpy as np
import pandas as pd
import os
import random
import cv2 # needs to be installed separately
import matplotlib.pyplot as plt
from skimage.io import imread, imshow
import matplotlib.image as mpimg
%matplotlib inline
预定义特征提取
我们从可以从图像中提取基本特征,如亮度、颜色等。
首先,我们加载一张图片并显示它。
img = mpimg.imread('azreali.jpg')
imgplot = plt.imshow(img)
plt.show()
![](img/output_5_0.png)
颜色提取
灰度直方图
颜色是基本的图像特征。 以下是创建颜色直方图的一些示例,这些直方图捕获图像的颜色组成。
将彩色招照片转为灰度照片
img_gray = imread('azreali.jpg',as_gray=True)
imshow(img_gray)
<matplotlib.image.AxesImage at 0x7fd5ffe7c910>
![](img/output_7_1.png)
我们可以为灰度图像创建一个颜色直方图,计算每个像素的强度,范围在 0 为黑色和 256 为白色之间。
你能猜出直方图的样子吗?
image = cv2.imread('azreali.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
hist = cv2.calcHist([gray], [0], None, [256], [0, 256])
plt.figure()
plt.title("Grayscale Histogram")
plt.xlabel("Bins")
plt.ylabel("# of Pixels")
plt.plot(hist)
plt.xlim([0, 256])
(0.0, 256.0)
![](img/output_9_1.png)
RGB直方图
实际上,直方图向右倾斜。 图片主要包含刻度亮侧的像素和相对较少的暗像素。
接下来,我们可以为 RGB 颜色空间创建颜色直方图,0 表示颜色的最低强度,256 表示最高强度。
你能猜出三座塔图片中的主要颜色是什么吗?
color = ('b','g','r')
for i,col in enumerate(color):
histr = cv2.calcHist([image],[i],None,[256],[0,256])
plt.plot(histr,color = col)
plt.xlim([0,256])
plt.show()
![](img/output_11_0.png)
确实。 图片中有很多蓝色,直方图检测到这些蓝色像素。
今天讲的都是很简单的图片处理,图片是一种比文本体积更大的文件数据,受限制于个人技术水平以及电脑性能,大邓无法展示机器学习、深度学习的图片分析算法。感兴趣的同学可以阅读论文,了解图片分析在营销中的新应用新进展。
Dzyabura, El Kihal and Peres (2020), “Image Analytics in Marketing”, in The Handbook of Market Research, Ch 14, Editors: Christian Homburg, Martin Klarmann, Arnd Vomberg. Springer, 2021.