pix = img.getpixel((x,y))
img.putpixel((x,y), colors[pix[0]])
这太可怕了一个配置文件报告指出了putpixel和getpixel方法作为罪魁祸首。有一点调查(即阅读文档),我发现“注意这种方法比较慢”。 re:putpixel。 (实际运行时间:putpixel为53s,1024×1024图像为50像素)
根据文档中的建议,我使用im.load()和直接像素访问:
pixels = img.load()
for x in range(w):
for y in range(h):
pix = pixels[x, y]
pixels[x, y] = colors[pix[0]]
处理速度提高了一个数量级,但仍然很慢:处理1024×1024图像的大约3.5秒。
对PIL文档的更全面的研究似乎表明Image.point()正是为了这个目的:
im.point(table) => image
im.point(function) => image
Returns a copy of the image where each pixel has been mapped through the given table. The table should contains 256 values per band in the image. If a function is used instead, it should take a single argument. The function is called once for each possible pixel value, and the resulting table is applied to all bands of the image.
我花了一些时间在界面上闯入,但是看起来不太合适。原谅我的无知,但PIL的文档是curt,我没有太多的图像处理经验。我已经google了一些,并提出了几个例子,但没有任何使用“点击”为我。所以,最后我的问题:
> Image.point()是这个工作的正确工具吗?
> Image.point()期望什么格式/结构表?
有人可以粗略地列举一个例子吗?到目前为止,我尝试过的每一次迭代都是直线黑色的形象。
我正在使用Python Imaging Library通过查找表来定义颜色关系来对黑白图像进行着色。查找表只是一个256元素的RGB元组列表:>>> len(colors)256>>> colors[0](255, 237, 237)>>> colors[127](50, 196, 33)>>>我的第一个版本使用了getpixel()和putpixel()方法:for x in range(w):...
VB可
使用
Point
方法
来获取图片指定点的颜色。
Point
方法
按照长整数,返回在 Form 或 PictureBox 上所指定磅的红bai-绿-蓝 (RGB) 颜色。
object.
Point
(x, y)
'窗体判色代码:
Private Sub Form1_MouseMove(Button As Integer, Shift As Integer, X As Single
import pylab
from
PIL
import
Image
,
Image
Enhance
from sk
image
import img_as_ubyte, img_as_float
import numpy as np
def plot_
image
(
image
, title=""):
# pylab.gray()
pylab.title(title, size=20)
pylab.imshow(
image
, cmap='gray')
#
image
.show()
Image
.new(mode, size, color)
层叠图片层叠两个图片,img2和img2,alpha是一个介于[0,1]的浮点数,如果为0,效果为img1,如果为1.0,效果为img2。当然img1和img2的尺寸和模式必须相同。这个函数可以做出很漂亮的效果来,而图形的算术加减后边会说到。
Image
....
图像转换成九种不同的格式,分别1,L,P,RGB,RGBA,CMYK,YCbCr,I,F
1.模式“1”
模式“1”为二值图像,非黑即白。但是它每个
像素
用8个bit表示,0表示黑,255表示白。
2.模式“L”
模式”L”为灰色图像,它的每个
像素
用8个bit表示,0表示黑,255表示白,其他数字表示不同的灰度。在
PIL
中
,从模式“RGB”转换为“L”模式是按照下面的公式转换的:
L = R * 2...
原理部分可见上一篇博客,这一部分主要是关于opencv实现:
这部分代码参考网上教程张氏标定法,但我觉得部分地方可能存在问题,后续会继续看一下官方代码
完整代码和棋盘图片下载可从这里下载
基本思路为:
检测代标定图像的内角点findChessboardCorners
利用find4QuadCornerSubpix寻找更精细的
像素
级坐标
根据测量的标定板的格子尺寸得到真实世界坐标系
中
内角点坐标
基于该url,我写了一个爬虫类,实现了按关键字下载固定数量的必应高清图片。
调用
时只需要一条
python
语句即可(由于
使用
了线程池并发请求图片,所以下载速度较快,一分钟300张高清图片没问题):
# 关键词:电脑壁纸
# 需要的图片数量:100
# 图片保存路径:'.
cv::Mat 类是用于保存图像以及其他矩阵
数据
的
数据
结构。默认情况下,它们的尺寸为0,但是也可以指定初始尺寸。
cv::Mat ima(240,320,CV_8U,cv::Scalar(100));
同时指定矩阵
中
元素的类型,这里的CV_8U对应的是单字节的
像素
图像。字母U意味着无符号的(Unsigned)。也可以
使用
字母S声明带符号的类型。
对于彩色图像,需要指定三个通道(CV_8UC3).也可以声明16位或32位的整数图像,或者浮点数图像。
当CV::Mat对象离开作用域后,分配的内存将被自动释放,
Paste
定义1:im.paste(
image
,box)
含义1:将一张图粘贴到另一张图像上。变量box或者是一个给定左上角的2元组,或者是定义了左,上,右和下
像素
坐标的4元组,或者为空(与(0,0)一样)。如果给定4元组,被粘贴的图像的尺寸必须与区域尺寸一样。
如果模式不匹配,被粘贴的图像将被转换为当前图像的模式。
src
Image
.at<uchar>(j, i) //表示的是 j 行 i 列 的这个
像素
src
Image
.at<uchar>(
Point
(j, i)) //表示的是 坐标(j,i)的
像素
为了我下面的图方便说明 j 换成 x , i 换成 y 。也就是说:
src
Image
.at<uchar>(x, y) //表示的是 x 行 y 列 的这个
像素