小编mpe*_*kov的帖子

获取C字符串中索引引用的字符

我有一个字符串.

char foo[] = "abcdefgh";
Run Code Online (Sandbox Code Playgroud)

我想写一个for循环,并逐个打印出所有字符:

a
b
c
Run Code Online (Sandbox Code Playgroud)

等等

这是在C.

c

7
推荐指数
1
解决办法
3万
查看次数

需要帮助实现特殊的边缘检测器

我正在从研究论文中实施一种方法.该方法的一部分需要一个主要的边缘检测器,作者描述如下:

  1. 获得DC图像(宽度和高度均有效地缩减8)
  2. 计算DC图像的Sobel梯度
  3. 阈值索贝尔梯度图像(使用T = 120)
  4. 用于清理边缘图像的形态学操作

请注意,这不是 Canny边缘检测 - 它们不会对非最大限制抑制等问题感到困扰.我当然可以使用Canny边缘检测来执行此操作,但我希望完全按照本文中的表达方式实现.

最后一步是我有点卡住了.

以下是作者对此的评价:

在从边缘检测过程获得二值边缘图之后,采用二元形态学运算来去除孤立的边缘像素,这可能在边缘检测期间引起误报警.

这就是事情在最后的结果应该是什么样的(边块被填充为黑色):

替代文字

如果我跳过最后一步,这就是我所拥有的:

替代文字

它似乎在正确的轨道上.所以,如果我对第4步进行侵蚀,会发生什么:

替代文字

我已经尝试过侵蚀和扩张的组合来获得与它们相同的结果,但是没有得到任何接近.任何人都可以建议结合使用形态学运算符来获得理想的结果吗?

这是二值化输出,以防有人想玩它:

替代文字

如果你真的很热衷,这里是源代码(C++):

#include <cv.h>
#include <highgui.h>
#include <stdlib.h>
#include <assert.h>

using cv::Mat;
using cv::Size;

#include <stdio.h>

#define DCTSIZE 8
#define EDGE_PX 255

/*
 * Display a matrix as an image on the screen.
 */
void
show_mat(char *heading, Mat const &m)
{
    Mat clone = m.clone();

    Mat scaled(clone.size(), CV_8UC1);
    convertScaleAbs(clone, scaled);

    IplImage ipl = scaled;

    cvNamedWindow(heading, CV_WINDOW_AUTOSIZE); 
    cvShowImage(heading, &ipl);
    cvWaitKey(0);
}

/* …
Run Code Online (Sandbox Code Playgroud)

c++ opencv image-processing

7
推荐指数
1
解决办法
1935
查看次数

OpenCV + python - 从视频文件中获取帧

我似乎无法使用OpenCV从文件中捕获帧 - 我已经从Ubuntu上的源代码编译了所有必要的先决条件,根据:http://opencv.willowgarage.com/wiki/InstallGuide%20%3A%20Debian

#!/usr/bin/env python

import cv
import sys

files = sys.argv[1:]

for f in files:
    capture = cv.CaptureFromFile(f)
    print capture

    print cv.GetCaptureProperty(capture, cv.CV_CAP_PROP_FRAME_WIDTH)
    print cv.GetCaptureProperty(capture, cv.CV_CAP_PROP_FRAME_HEIGHT)

    for i in xrange(10000):
        frame = cv.QueryFrame(capture)
        if frame:
            print frame
Run Code Online (Sandbox Code Playgroud)

输出:

ubuntu@local:~/opencv$ ./test.py bbb.avi 
<Capture 0xa37b130>
0.0
0.0
Run Code Online (Sandbox Code Playgroud)

帧总是无......

我使用以下代码将视频文件转码为i420格式:

mencoder $1 -nosound -ovc raw -vf format=i420 -o $2
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

python opencv video-processing

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

为什么这段代码会引发csv.Error?

我正在尝试使用Python的内置csv模块写出CSV .

import csv
import sys
writer = csv.writer(sys.stdout, delimiter="|", quoting=csv.QUOTE_NONE)
writer.writerow(['"foo', "bar"])
Run Code Online (Sandbox Code Playgroud)

我期望的输出是:

"foo|bar
Run Code Online (Sandbox Code Playgroud)

但是,我明白了:

Error: need to escape, but no escapechar set
Run Code Online (Sandbox Code Playgroud)

文件说:

当输出数据中出现当前分隔符时,它前面是当前的escapechar字符.如果未设置escapechar,则在遇到需要转义的任何字符时,编写器将引发Error.

现在,分隔符('|',管道字符)不会出现在数据中的任何位置.为什么CSV编写器试图逃避某些事情?

python csv

7
推荐指数
1
解决办法
6206
查看次数

访问OpenCV Mat元素时确定模板类型

我正在使用以下代码为图像添加一些噪声(直接来自OpenCV参考,第449页 - 解释cv::Mat::begin):

void
simulate_noise(Mat const &in, double stddev, Mat &out)
{
    cv::Size s = in.size();
    vector<double> noise = generate_noise(s.width*s.height, stddev);

    typedef cv::Vec<unsigned char, 3> V4;
    cv::MatConstIterator_<V4> in_itr = in.begin<V4>();
    cv::MatConstIterator_<V4> in_end = in.end<V4>();
    cv::MatIterator_<V4> out_itr = out.begin<V4>();
    cv::MatIterator_<V4> out_end = out.end<V4>();

    for (; in_itr != in_end && out_itr != out_end; ++in_itr, ++out_itr)
    {
        int noise_index = my_rand(noise.size());
        for (int j = 0; j < 3; ++j)
            (*out_itr)[j] = (*in_itr)[j] + noise[noise_index];
    }
}
Run Code Online (Sandbox Code Playgroud)

没有什么过于复杂:

  • inout …

c++ opencv iterator image-processing

6
推荐指数
2
解决办法
5163
查看次数

将stdout重定向到无法正常工作的文件

我有一个使用子进程来获取HTML的脚本:

misha@misha-K42Jr:~/git/domain_classifier$ python webkit_retrieve.py error-cut.txt html/error -N 5
http://kurabo.co.jp HostNotFoundError
http://monarch.com HostNotFoundError
http://nssmgmt.com HostNotFoundError
http://sbcglobal.net HostNotFoundError
http://dynamixcorp.com SslHandshakeFailedError
http://groupe-synox.com RemoteHostClosedError
QFont::setPixelSize: Pixel size <= 0 (0)
http://www.cnn.com NoError
http://pacbell.net TimeoutError
Run Code Online (Sandbox Code Playgroud)

如果我运行相同的脚本,但将输出重定向到文件,我在输出中什么也得不到:

misha@misha-K42Jr:~/git/domain_classifier$ python webkit_retrieve.py error-cut.txt html/error -N 5 > stdout.txt
QFont::setPixelSize: Pixel size <= 0 (0)
misha@misha-K42Jr:~/git/domain_classifier$ cat stdout.txt
misha@misha-K42Jr:~/git/domain_classifier$
Run Code Online (Sandbox Code Playgroud)

为什么输出空?它不应该包含在第一种情况下打印到stdout的相同内容吗?

linux bash io-redirection

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

使用PIL的ImageDraw模块

我正在尝试使用PIL的ImageDraw模块进行单独的像素操作.下面的代码应该创建Tkinter canvas小部件.然后打开图像,将一个像素的颜色更改为红色,然后将图像嵌入到画布小部件中.但是,它似乎没有起作用.

我的代码:

import Tkinter
from PIL import ImageTk, Image, ImageDraw


class image_manip(Tkinter.Tk):

    def __init__(self):
        Tkinter.Tk.__init__(self)

        self.configure(bg='red')

        self.ImbImage = Tkinter.Canvas(self, highlightthickness=0, bd=0, bg='blue')
        self.ImbImage.pack()

        im = Image.open(r'C:\Python26\Suite\test.png')

        print im.format, im.size, im.mode

        im = ImageDraw.Draw(im)

        im = im.point((0, 0), fill="red")

        self.i = ImageTk.PhotoImage(im)
        self.ImbImage.create_image(139, 59, image=self.i)




def run():
    image_manip().mainloop()
if __name__ == "__main__":
    run()
Run Code Online (Sandbox Code Playgroud)

运行我的代码时出现以下错误:

Exception AttributeError: "PhotoImage instance has no attribute '_PhotoImage__photo'" in <bound method PhotoImage.__del__ of <PIL.ImageTk.PhotoImage instance at 0x05DF7698>> ignored
Traceback (most recent call last):
  File "<string>", line …
Run Code Online (Sandbox Code Playgroud)

python image-manipulation tkinter image-processing python-imaging-library

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

使用 opencv 在图像中查找形状

我正在尝试使用 OpenCV 在图像中查找形状。我知道我想要匹配的形状(有些形状我不知道,但我不需要找到它们)和它们的方向。我不知道它们的大小(比例)和位置。

我目前的做法:

  1. 检测轮廓
  2. 对于每个轮廓,计算最大边界框
  3. 将每个边界框分别与已知形状之一匹配。在我的实际项目中,我将区域缩放到模板大小并计算 Sobel 梯度的差异,但对于此演示,我仅使用纵横比。

这种方法失败的地方是形状接触的地方。轮廓检测将两个相邻的形状拾取为单个轮廓(单个边界框)。匹配步骤显然会失败。

有没有办法修改我分别处理相邻形状的方法?另外,有没有更好的方法来执行第 3 步?

例如:(Es 为绿色,Ys 为蓝色)

在此处输入图片说明

失败案例:(红色未知形状)

在此处输入图片说明

源代码:

import cv
import sys
E = cv.LoadImage('e.png')
E_ratio = float(E.width)/E.height
Y = cv.LoadImage('y.png')
Y_ratio = float(Y.width)/Y.height
EPSILON = 0.1

im = cv.LoadImage(sys.argv[1], cv.CV_LOAD_IMAGE_GRAYSCALE)
storage = cv.CreateMemStorage(0)
seq = cv.FindContours(im, storage, cv.CV_RETR_EXTERNAL, 
        cv.CV_CHAIN_APPROX_SIMPLE)
regions = []
while seq:
    pts = [ pt for pt in seq ]
    x, y = zip(*pts)    
    min_x, min_y = min(x), min(y)
    width, height = max(x) - min_x + …
Run Code Online (Sandbox Code Playgroud)

python opencv

5
推荐指数
1
解决办法
9563
查看次数

需要帮助矢量化此代码

我有一个8位图像.对于每个像素,我需要计算当前行中的序号位置.例如,如果行是:

32 128 16 64,
Run Code Online (Sandbox Code Playgroud)

那我需要结果:

1 3 0 2,
Run Code Online (Sandbox Code Playgroud)

因为32是该行中的第1个最高值,所以128是第3个最高,16个是第0个最高值,64个是第2个最高值.

我需要对图像的所有行重复上述过程.这是非矢量化代码:

for (int curr = 0; curr < new_height; ++curr)
{
    vector<pair<unsigned char, char> > ordered;
    for (char i = 0; i < 4; ++i)
    {
        unsigned char val = luma24.at<unsigned char>(curr, i);
        ordered.push_back(pair<unsigned char, char>(val, i));
    }
    sort(ordered.begin(), ordered.end(), cmpfun);
    for (int i = 0; i < 4; ++i)
        signature.at<char>(curr, ordered[i].second) = i;
}
Run Code Online (Sandbox Code Playgroud)

luma24是我正在读取的8位图像,它有new_height行和4列. signature是一个相同大小的签名图像(暂时忽略符号的差异,因为它不相关) - 它是我存储结果的地方.cmpfun是一个简单的比较器功能.

我试图对上面的代码进行矢量化并得到了这个:

Mat ordinal;
luma24.convertTo(ordinal, …
Run Code Online (Sandbox Code Playgroud)

c++ opencv vectorization

5
推荐指数
1
解决办法
456
查看次数

有什么区别!和!! 在yaml?

我正在尝试加载看起来像这样的YAML:

dist: !!opencv-matrix
   rows: 380
   cols: 380
   dt: f
   data: [ 0., 0., -1.88644529e+18, 2.45423365e+00, 11698176.,
       2.03862047e+00, -8.85501460e+10, 2.54738545e+00, 1.71208843e+20,
       ...
       2.44447327e+00 ]
Run Code Online (Sandbox Code Playgroud)

加载代码只是:

import yaml
y = yaml.load(s)
Run Code Online (Sandbox Code Playgroud)

其中s是加载到字符串中的YAML.

我收到此错误:

yaml.constructor.ConstructorError: could not determine a constructor for the tag 'tag:yaml.org,2002:opencv-matrix'
  in "<string>", line 382, column 7:
    dist: !!opencv-matrix
Run Code Online (Sandbox Code Playgroud)

这很公平,所以我添加了该标记的构造函数:

def opencv_matrix(loader, node):
    mapping = loader.construct_mapping(node)
    mat = np.array(mapping["data"])
    mat.resize(mapping["rows"], mapping["cols"])
    return mat

yaml.add_constructor(u"!!opencv-matrix", opencv_matrix)
y = yaml.load(s)
Run Code Online (Sandbox Code Playgroud)

我仍然得到错误.但是,如果我用!opencv_matrix替换!! opencv_matrix,那么一切正常.

这里发生了什么?

python opencv yaml

5
推荐指数
1
解决办法
1748
查看次数