读取图像
可以使用opencv,也可以使用skimage,记住他们的区别:
- 读图:opencv读图进来是BGR,而skimage是RGB。
- 显示:opencv的接口使用BGR,而matplotlib.pyplot 则是RGB模式。
提取图像纹理
1.local_binary_pattern
from skimage.feature import local_binary_pattern
import cv2
# 读取图像
image = cv2.imread('1.png')
# 转换为灰度图
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 处理
lbp = local_binary_pattern(image, n_points, radius)
这里实现对灰度图的纹理提取。
如何提取一张RGB图片的纹理颜色呢?
from __future__ import division
import skimage.io
import skimage.feature
import skimage.color
import skimage.transform
import skimage.util
import skimage.segmentation
import numpy
import matplotlib.pyplot as plt
from skimage.segmentation import felzenszwalb
from skimage.data import coffee
img = coffee()
****for colour_channel in (0, 1, 2):
img[:, :, colour_channel] = skimage.feature.local_binary_pattern(
img[:, :, colour_channel], 8,1.0,method='var')****
plt.imshow(img)
plt.show()
纹理映射
1. 纹理映射(Texture Mapping)
我们通过数字化技术把纹理图案覆盖或者映射或者投射到三位物体的表面,给物体增加表面细节的过程叫纹理映射。
2.思想
我们需要寻找一种纹理空间(U,V)坐标到三维物体曲面(s,t)坐标之间的映射关系,将纹理空间对应的坐标上对应的彩色参数值映射给曲面上,从而给曲面得到彩色的纹理细节。
其实如果我们还想给几何纹理带来的形状有所有变化,我们可以采用扰动函数给景物表面采样点的位置坐微小的扰动来改变几何形状
3.纹理映射的代码实现
def TextureFill(W, H):
try:
txt = cv2.imread("C:/Users/prave/PycharmProjects/graphics-hw3/data/blackwhite.png")
txt = cv2.resize(txt, (W, H), interpolation=cv2.INTER_CUBIC)
return txt
except Exception, e:
print "Texture fill failed", e