官方网站下载cad,后台很慢wordpress,手机中国建设银行网站,甘肃做网站的公司定期更新#xff0c;建议关注更新收藏。 本站友情链接#xff1a; OCR篇1 可变形卷积Deformable Conv opencv-python形态学操作合集 目录 仿射变换图像二阶导数本质探讨PIL通道、模式、尺寸、坐标系统、调色板、信息滤波器实现图像格式转换 OpenCV轮廓提取 仿射变换
仿射变换…定期更新建议关注更新收藏。 本站友情链接 OCR篇1 可变形卷积Deformable Conv opencv-python形态学操作合集 目录 仿射变换图像二阶导数本质探讨PIL通道、模式、尺寸、坐标系统、调色板、信息滤波器实现图像格式转换 OpenCV轮廓提取 仿射变换
仿射变换请点击标题链接打开内容。
图像二阶导数本质探讨
二阶导数比一阶导数有更好的细节增强表现。原理如下。 已知图像是由矩阵像素值、通道RGB组合来表示的。当然这其中就会出现像素值的变化。 为了方便常常把RGB图像转化成灰度图像这其中会发现一些区域的灰度变化灰度突变这部分就可以看作是图像中的一部分轮廓边缘。

以上公式是如何推导的呢 首先根据导数的概念可知 f’xdf/dx,当Δ1即f’xf(x1)-f(x)/1 二阶导数同理。f’‘xf’(xΔx)-f’(x)/Δx, 运用之前的推导的一阶式子f’x[f(x1)-f(x)-(f(x-11)-f(x-1))]/1f(x1)-f(x-1)-f(x) 带上y值的话没有什么区别影响得到图片中第二个式子
对于一阶导数除了灰度突变的地方其它灰度缓慢变化的地方数值相同而且符号也相同。 而二阶导数在灰度缓慢变化的地方数值为0而在灰度突变的地方有符号相反的2个数值。也即二阶导数产生了一个像素宽的双边缘。这个可以找一个矩阵计算自行验证一下。
倘若用原图像素值 相对应的减去 二阶导数后的像素值在灰度均匀或灰度缓慢变化的地方图像并没有任何改变但在灰度突变的边缘处更加差值巨大。比如原来是100和50的灰度差别现在是150和10的灰度差别对比度增强了很多。
因为二阶导数产生了一个像素宽的双边缘且2个边缘的二阶导数值符号相反因此在合并图像时就要考虑符号的问题不然就适得其反。如果像一阶导数那样使用了绝对值那么这种双边缘的对比反差就没有了所以二阶导数也就没有使用绝对值。
二阶导数比一阶导数获得的物体边界更加细致。但是显而易见的二阶导数对噪声点也更加敏感会放大噪声的影响。 在一片灰度均匀的区域有一个噪声点噪声之所以是噪声本身其像素值就凸显于其他周围区域经过二阶导数处理后噪声点更加孤立明显了尤其在这些灰度平滑区域更加的显眼噪声被放大了。
PIL
PIL中所涉及的基本概念有如下几个通道bands、模式mode、尺寸size、坐标系统coordinate system、调色板palette、信息info和滤波器filters。
通道、模式、尺寸、坐标系统、调色板、信息
每张图片都是由一个或者多个数据通道构成。PIL允许在单张图片中合成相同维数和深度的多个通道。以RGB图像为例每张图片都是由三个数据通道构成分别为R、G、B通道。而对于灰度图像则只有一个通道。 对于一张图片的通道数量和名称可以通过方法getbands()来获取。方法getbands()是Image模块的方法它会返回一个字符串元组tuple。该元组将包括每一个通道的名称。
from PIL import Image
im Image.open(abs_path)
im.getbands()PIL中有九种不同模式。分别为1LPRGBRGBACMYKYCbCrIF。 图像的模式定义了图像的类型和像素的位宽。当前支持如下模式 11位像素表示黑和白但是存储的时候每个像素存储为8bit。模式“1”为二值图像非黑即白。但是它每个像素用8个bit表示0表示黑255表示白。
L8位像素表示黑和白。0表示黑255表示白其他数字表示不同的灰度。在PIL中从模式“RGB”转换为“L”模式是按照公式转换的L R * 299/1000 G * 587/1000 B * 114/1000
P8位像素使用调色板映射到其他模式。模式“P”为8位彩色图像它的每个像素用8个bit表示其对应的彩色值是按照调色板查询出来的。
RGB3x8位像素为真彩色。
RGBA4x8位像素有透明通道的真彩色。它的每个像素用32个bit表示其中24bit表示红色、绿色和蓝色三个通道另外8bit表示alpha通道即透明通道。
CMYK4x8位像素颜色分离。模式“CMYK”为32位彩色图像它的每个像素用32个bit表示。模式“CMYK”就是印刷四分色模式它是彩色印刷时采用的一种套色模式利用色料的三原色混色原理加上黑色油墨共计四种颜色混合叠加形成所谓“全彩印刷”。 四种标准颜色是CCyan 青色又称为‘天蓝色’或是‘湛蓝’MMagenta 品红色又称为‘洋红色’YYellow 黄色KKey Plate(blacK) 定位套版色黑色。 PIL中“RGB”转换为“CMYK”的公式如下 C 255 - R M 255 - G Y 255 - B K 0 由于该转换公式比较简单转换后的图像颜色有些失真。
YCbCr3x8位像素彩色视频格式。 模式“YCbCr”为24位彩色图像它的每个像素用24个bit表示。YCbCr其中Y是指亮度分量Cb指蓝色色度分量而Cr指红色色度分量。人的肉眼对视频的Y分量更敏感因此在通过对色度分量进行子采样来减少色度分量后肉眼将察觉不到的图像质量的变化。 模式“RGB”转换为“YCbCr”的公式如下PIL并非按照这个来执行的 Y 0.257R0.504G0.098B16 Cb -0.148R-0.291G0.439B128 Cr 0.439R-0.368G-0.071*B128
I32位整型像素。32位整型灰色图像它的每个像素用32个bit表示0表示黑255表示白(0,255)之间的数字表示不同的灰度。在PIL中从模式“RGB”转换为“I”模式是按照下面的公式转换的 I R * 299/1000 G * 587/1000 B * 114/1000
F32位浮点型像素。为32位浮点灰色图像它的每个像素用32个bit表示0表示黑255表示白(0,255)之间的数字表示不同的灰度。在PIL中从模式“RGB”转换为“F”模式是按照下面的公式转换的 F R * 299/1000 G * 587/1000 B * 114/1000 模式“F”与模式“L”的转换公式是一样的都是RGB转换为灰色值的公式但模式“F”会保留小数部分
PIL也支持一些特殊的模式包括RGBX有padding的真彩色和RGBa有自左乘alpha的真彩色。
可以通过mode属性读取图像的模式。其返回值是包括上述模式的字符串。
from PIL importImage
im Image.open(abs_path)
md im.mode
print md #RGB通过size属性可以获取图片的尺寸。这是一个二元组包含水平和垂直方向上的像素数。
from PIL importImage
im Image.open(abs_path)
im_size im.size
print im_sizePIL使用笛卡尔即x-y像素坐标系统坐标(00)位于左上角。注意坐标值表示像素的角位于坐标00处的像素的中心实际上位于0.50.5。坐标经常用二元组xy表示。 长方形表示为四元组前面是左上角坐标。例如一个覆盖800x600的像素图像的长方形表示为00800600。
调色板模式 (“P”)使用一个颜色调色板为每个像素定义具体的颜色值
信息使用info属性可以为一张图片添加一些辅助信息。这个是字典对象。加载和保存图像文件时多少信息需要处理取决于文件格式。
from PIL import Image
im Image.open(abs_path)
im.info
#{jfif_version:(1, 1), jfif: 257, jfif_unit: 1, jfif_density: (96, 96), dpi: (96, 96)}
print im_info[jfif_version]滤波器
对于将多个输入像素映射为一个输出像素的几何操作PIL提供了4个不同的采样滤波器 NEAREST最近滤波。从输入图像中选取最近的像素作为输出像素。它忽略了所有其他的像素。 BILINEAR双线性滤波。在输入图像的2x2矩阵上进行线性插值。注意PIL的当前版本做下采样时该滤波器使用了固定输入模板。 BICUBIC双立方滤波。在输入图像的4x4矩阵上进行立方插值。注意PIL的当前版本做下采样时该滤波器使用了固定输入模板。 ANTIALIAS平滑滤波。这是PIL 1.1.3版本中新的滤波器。对所有可以影响输出像素的输入像素进行高质量的重采样滤波以计算输出像素值。在当前的PIL版本中这个滤波器只用于改变尺寸和缩略图方法。 注意在当前的PIL版本中ANTIALIAS滤波器是下采样例如将一个大的图像转换为小图时唯一正确的滤波器。BILIEAR和BICUBIC滤波器使用固定的输入模板用于固定比例的几何变换和上采样是最好的。
Image模块中的方法resize()和thumbnail()都会resize图片都可以用滤波器。
resize(size, filterNone) imagefrom PIL import Image
im Image.open(abs_path)
im.size #(800, 450)
im_resize im.resize((256,256))
im_resize.size #(256, 256)#对参数filter不赋值的话方法resize()默认使用NEAREST滤波器。如果要使用其他滤波器可以通过下面的方法来实现
im_resize0 im.resize((256,256), Image.BILINEAR)
im_resize1 im.resize((256,256), Image.BICUBIC)
m_resize2 im.resize((256,256), Image.ANTIALIAS)im.thumbnail(size, filterNone)
#方法thumbnail()需要保持宽高比对于size(200,200)的输入参数其最终的缩略图尺寸为(200, 112)。from PIL import Image
im Image.open(abs_path)
im.size #(800, 450)
im.thumbnail((200,200))
im.size#(200,112)对参数filter不赋值的话方法thumbnail()默认使用NEAREST滤波器。如果要使用其他滤波器可以通过下面的方法来实现
im.thumbnail((200,200),Image.BILINEAR)
im.thumbnail((200,200), Image.BICUBIC)
im.thumbnail((200,200), Image.ANTIALIAS)实现图像格式转换
不管其图像格式是PNG还是BMP或者JPG在PIL中使用Image模块的open()函数打开后返回的图像对象的模式都是“RGB”。而对于灰度图像不管其图像格式是PNG还是BMP或者JPG打开后其模式为“L”。
对于PNG、BMP和JPG彩色图像格式之间的互相转换都可以通过Image模块的open()和save()函数来完成。具体说就是在打开这些图像时PIL会将它们解码为三通道的“RGB”图像。用户可以基于这个“RGB”图像对其进行处理。处理完毕使用函数save()可以将处理结果保存成PNG、BMP和JPG中任何格式。这样也就完成了几种格式之间的转换。同理其他格式的彩色图像也可以通过这种方式完成转换。当然对于不同格式的灰度图像也可通过类似途径完成只是PIL解码后是模式为“L”的图像。
Image模块的convert()函数用于不同模式图像之间的转换。 Convert()函数有三种形式的定义它们定义形式如下 im.convert(mode) ⇒ image im.convert(“P”, **options) ⇒ image im.convert(mode, matrix) ⇒ image 使用不同的参数将当前的图像转换为新的模式并产生新的图像作为返回值。
OpenCV
Opencv 中 waitkey 0xFF“0xFF”的作用解释
if cv2.waitkey(30)27 v.s. if cv2.waitkey(30)0xff27cv2.waitkeydelay函数
1.若参数delay≤0表示一直等待按键
2、若delay取正整数表示等待按键的时间比如cv2.waitKey(30)就是等待30milliseconds视频中一帧数据显示停留的时间
cv2.waitKey(delay)返回值
1、等待期间有按键返回按键的ASCII码比如Esc的ASCII码为27即0001 1011
2、等待期间没有按键返回 -10xff其实人如其名就是和0xff进行and与运算0xff的二进制是0b1111 1111
当按下按键时waitkey函数的输入值一定是一个正整数。任何一个正整数与1111 1111做运算其结果必然是他本身
其实系统中按键对应的ASCII码值并不一定仅仅只有8位同一按键对应的ASCII并不一定相同但是后8位一定相同。因为系统为了区别不同情况下的同一按键。比如说“q”这个按键当小键盘数字键“NumLock”激活时“q”对应的ASCII值为100000000000001100011 。而其他情况下对应的ASCII值为01100011。它们的后8位相同其他按键也是如此。为了避免这种不同的情况引用0xff正是为了只取按键对应的ASCII值后8位来排除不同按键的干扰进行判断按键是什么。轮廓提取