标签: image-processing

Viola-Jones的脸部检测声称拥有180k功能

我一直在实施Viola-Jones的人脸检测算法.该技术依赖于在图像内放置24×24像素的子帧,并且随后在每个位置中将矩形特征放置在每个位置中,并且每种尺寸都可能.

这些特征可以包括两个,三个或四个矩形.提供以下示例.

矩形功能

他们声称详尽的集合超过180k(第2部分):

鉴于探测器的基本分辨率为24x24,详尽的矩形特征集非常大,超过180,000.请注意,与Haar基础不同,矩形特征集是过度完整的.

本文未明确说明以下陈述,因此它们是我的假设:

  1. 只有2个双矩形特征,2个三矩形特征和1个四矩形特征.这背后的逻辑是我们正在观察突出显示的矩形之间的差异,而不是明确的颜色或亮度或那种类型的任何东西.
  2. 我们不能将特征类型A定义为1x1像素块; 它必须至少至少1x2像素.此外,类型D必须至少为2x2像素,并且此规则相应地适用于其他功能.
  3. 我们不能将特征类型A定义为1×3像素块,因为中间像素不能被分割,并且从其自身减去它与1×2像素块相同; 此要素类型仅针对偶数宽度定义.此外,要素类型C的宽度必须可以被3整除,并且此规则相应地适用于其他要素.
  4. 我们无法定义宽度和/或高度为0 的要素.因此,我们将xy迭代为24减去要素的大小.

基于这些假设,我计算了详尽的集合:

const int frameSize = 24;
const int features = 5;
// All five feature types:
const int feature[features][2] = {{2,1}, {1,2}, {3,1}, {1,3}, {2,2}};

int count = 0;
// Each feature:
for (int i = 0; i < features; i++) {
    int sizeX = feature[i][0];
    int sizeY = feature[i][1];
    // Each position:
    for (int x = 0; x <= …
Run Code Online (Sandbox Code Playgroud)

algorithm image-processing computer-vision face-detection viola-jones

78
推荐指数
2
解决办法
2万
查看次数

c#图像调整大小到不同大小,同时保留纵横比

我正在尝试调整图像大小,同时保留原始图像的宽高比,这样新图像看起来不会被压扁.

例如:

将150*100图像转换为150*150图像.
高度的额外50个像素需要用白色背景颜色填充.

这是我正在使用的当前代码.

它适用于调整大小,但更改原始图像的宽高比会压缩新图像.

private void resizeImage(string path, string originalFilename, 
                         int width, int height)
    {
        Image image = Image.FromFile(path + originalFilename);

        System.Drawing.Image thumbnail = new Bitmap(width, height);
        System.Drawing.Graphics graphic = 
                     System.Drawing.Graphics.FromImage(thumbnail);

        graphic.InterpolationMode = InterpolationMode.HighQualityBicubic;
        graphic.SmoothingMode = SmoothingMode.HighQuality;
        graphic.PixelOffsetMode = PixelOffsetMode.HighQuality;
        graphic.CompositingQuality = CompositingQuality.HighQuality;

        graphic.DrawImage(image, 0, 0, width, height);

        System.Drawing.Imaging.ImageCodecInfo[] info =
                         ImageCodecInfo.GetImageEncoders();
        EncoderParameters encoderParameters;
        encoderParameters = new EncoderParameters(1);
        encoderParameters.Param[0] = new EncoderParameter(Encoder.Quality,
                         100L);            
        thumbnail.Save(path + width + "." + originalFilename, info[1], 
                         encoderParameters);
    }
Run Code Online (Sandbox Code Playgroud)

编辑:我想填充图像而不是裁剪

c# system.drawing image-processing image-scaling

77
推荐指数
8
解决办法
15万
查看次数

在PHP中调整图像大小

我想写一些PHP代码,自动调整通过表单上传到147x147px的任何图像,但我不知道如何去做(我是一个相对的PHP新手).

到目前为止,我已成功上传图片,识别文件类型并清理名称,但我想将调整大小功能添加到代码中.例如,我有一个2.3MB的测试图像,尺寸为1331x1331,我希望代码可以缩小尺寸,我猜测它也会大大压缩图像的文件大小.

到目前为止,我有以下内容:

if ($_FILES) {
                //Put file properties into variables
                $file_name = $_FILES['profile-image']['name'];
                $file_size = $_FILES['profile-image']['size'];
                $file_tmp_name = $_FILES['profile-image']['tmp_name'];

                //Determine filetype
                switch ($_FILES['profile-image']['type']) {
                    case 'image/jpeg': $ext = "jpg"; break;
                    case 'image/png': $ext = "png"; break;
                    default: $ext = ''; break;
                }

                if ($ext) {
                    //Check filesize
                    if ($file_size < 500000) {
                        //Process file - clean up filename and move to safe location
                        $n = "$file_name";
                        $n = ereg_replace("[^A-Za-z0-9.]", "", $n);
                        $n = strtolower($n);
                        $n = "avatars/$n";
                        move_uploaded_file($file_tmp_name, $n); …
Run Code Online (Sandbox Code Playgroud)

php image-processing image-upload image-resizing

75
推荐指数
7
解决办法
28万
查看次数

重新采样表示图像的numpy数组

我正在寻找如何重新采样以新尺寸表示图像数据的numpy数组,最好选择插值方法(最近,双线性等).我知道有

scipy.misc.imresize
Run Code Online (Sandbox Code Playgroud)

这通过包装PIL的调整大小功能来完成这一点.唯一的问题是,因为它使用PIL,numpy数组必须符合图像格式,给我最多4个"颜色"通道.

我希望能够使用任意数量的"颜色"通道调整任意图像的大小.我想知道是否有一种简单的方法可以在scipy/numpy中执行此操作,或者如果我需要自己滚动.

关于如何自己编造一个我有两个想法:

  • 一个scipy.misc.imresize分别在每个通道上运行的函数
  • 创建我自己的使用 scipy.ndimage.interpolation.affine_transform

对于大数据,第一个可能会很慢,而第二个似乎不提供除样条之外的任何其他插值方法.

python numpy image-processing scipy python-imaging-library

70
推荐指数
4
解决办法
8万
查看次数

68
推荐指数
7
解决办法
12万
查看次数

OpenCV python:ValueError:要解压缩的值太多

我正在编写一个opencv程序,我在另一个stackoverflow问题上找到了一个脚本:计算机视觉:屏蔽人手

当我运行脚本的答案时,我收到以下错误:

Traceback (most recent call last):
    File "skinimagecontour.py", line 13, in <module>
    contours, _ = cv2.findContours(skin_ycrcb, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
ValueError: too many values to unpack
Run Code Online (Sandbox Code Playgroud)

代码:

import sys
import numpy
import cv2

im = cv2.imread('Photos/test.jpg')
im_ycrcb = cv2.cvtColor(im, cv2.COLOR_BGR2YCR_CB)

skin_ycrcb_mint = numpy.array((0, 133, 77))
skin_ycrcb_maxt = numpy.array((255, 173, 127))
skin_ycrcb = cv2.inRange(im_ycrcb, skin_ycrcb_mint, skin_ycrcb_maxt)
cv2.imwrite('Photos/output2.jpg', skin_ycrcb) # Second image

contours, _ = cv2.findContours(skin_ycrcb, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for i, c in enumerate(contours):
    area = cv2.contourArea(c)
    if area > 1000:
        cv2.drawContours(im, contours, …
Run Code Online (Sandbox Code Playgroud)

python opencv image-processing

68
推荐指数
5
解决办法
8万
查看次数

如何在OpenCV中定义Watershed的标记?

我正在用OpenCV为Android写作.我正在使用标记控制的分水岭分割类似于下面的图像,而无需用户手动标记图像.我打算使用区域最大值作为标记.

minMaxLoc()会给我价值,但我怎么能把它限制在我感兴趣的blob?我可以利用findContours()cvBlob blob 的结果来限制ROI并对每个blob应用最大值吗?

输入图像

opencv image-processing computer-vision image-segmentation watershed

67
推荐指数
3
解决办法
6万
查看次数

将图像从PIL转换为openCV格式

我正在尝试将图像转换PILOpenCV格式.我正在使用OpenCV 2.4.3.这是我到目前为止所尝试的.

>>> from PIL import Image
>>> import cv2 as cv
>>> pimg = Image.open('D:\\traffic.jpg')                           #PIL Image
>>> cimg = cv.cv.CreateImageHeader(pimg.size,cv.IPL_DEPTH_8U,3)    #CV Image
>>> cv.cv.SetData(cimg,pimg.tostring())
>>> cv.cv.NamedWindow('cimg')
>>> cv.cv.ShowImage('cimg',cimg)
>>> cv.cv.WaitKey()
Run Code Online (Sandbox Code Playgroud)

但我认为图像没有转换为CV格式.窗口向我显示一个大的棕色图像.在将图像转换PILCV格式时我在哪里出错了?

另外,为什么我需要键入cv.cv访问功能?

python opencv image-processing python-imaging-library

67
推荐指数
3
解决办法
8万
查看次数

是否可以告诉JPEG的质量水平?

这实际上是一个两部分问题,因为我还没有完全理解这些东西是如何工作的:

我的情况:我正在编写一个让用户上传图片的网络应用程序.然后我的应用程序调整为可显示的内容(例如:640x480-ish)并保存文件以供日后使用.

我的问题:

  1. 给定一个任意的JPEG文件,是否可以判断质量等级是什么,以便在保存调整大小的图像时可以使用相同的质量?
  2. 这甚至不重要吗?无论原始质量如何,我是否应该将所有图像保存在合适的级别(例如:75-80)?

我对此并不十分肯定,因为我认为:(让我们举一个极端的例子),如果某人有500万像素的图像以质量0保存,它就会像任何东西一样块状.将图像尺寸缩小到640x480,可以平滑块状,几乎不那么明显......直到我再次将质量保存为0 ...

在频谱的另一端,如果有一个图像是800x600,q = 0,调整到640x480不会改变它看起来像完全废话的事实,所以用q = 80保存将是多余的.

我甚至关闭了吗?

我在PHP上使用GD2库,如果有任何用处的话

jpeg image-processing image-compression

66
推荐指数
6
解决办法
4万
查看次数

C#中保存的JPG的质量

我制作了一个小型的C#应用​​程序来创建.jpg格式的图像.

pictureBox.Image.Save(name,ImageFormat.Jpeg);
Run Code Online (Sandbox Code Playgroud)

图像成功创建.我输入原始图片,用它做一些事情并保存.然而,这张新照片的质量低于原始照片的质量.

有没有办法设定所需的质量?

c# image-processing

64
推荐指数
5
解决办法
7万
查看次数