小编Dan*_*šek的帖子

Python - 将图像转换为像素值字符串

我有一个从网络摄像头捕获的.jpg图像.这是一个灰度图像.我需要将图像转换为像素的字符串,如下所示:

"255 232 45 678 56 23....345 76 44 767 433 345"
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?

另外,改变图像的大小会改变这些值吗?

python opencv image pixels python-imaging-library

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

解压缩调用cv2.findContours的值太多了

我是一个蟒蛇初学者.我试图运行此代码:

#applying closing function 
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (7, 7))
closed = cv2.morphologyEx(th3, cv2.MORPH_CLOSE, kernel)

#finding_contours 
(cnts, _) = cv2.findContours(closed.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

for c in cnts:
    peri = cv2.arcLength(c, True)
    approx = cv2.approxPolyDP(c, 0.02 * peri, True)
    cv2.drawContours(frame, [approx], -1, (0, 255, 0), 2)
Run Code Online (Sandbox Code Playgroud)

当我召唤mask.py时,我得到了这个ValueError:

Traceback (most recent call last):
  File "mask.py", line 22, in <module>
    (cnts, _) = cv2.findContours(closed.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
ValueError: too many values to unpack
Run Code Online (Sandbox Code Playgroud)

这段代码有什么问题?

python opencv python-2.7

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

在skimage中绘制渐变椭圆

我想在渐变颜色的skimage中绘制一个椭圆形蒙版.颜色从椭圆内部开始变化,并在外部椭圆处结束.如何用skimage或open-cv绘制它?

如下图所示: 椭圆渐变色

python graphics opencv scikit-image

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

OpenCv (Python) 中单通道图像的 FindContours

我无法使用 OpenCV 的findContours(...)方法在单通道图像中查找轮廓。该图像实际上是一个 numpy 数组,其形状(128, 128)和元素的实际值介于 之间[0.0,1.0]。最初的形状是(1,128,128,1)但我用过np.squeeze(...)去掉第一个和最后一个维度。保留其中任何一个都不能解决我的问题。

我尝试过的:

image = np.squeeze(array) #using np.squeeze(array, [0]) won't help.
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
contours, hierarchy = cv2.findContours(image, 1, 2)
Run Code Online (Sandbox Code Playgroud)

上面的代码会导致以下异常:

error: (-215) scn == 3 || scn == 4 in function cv::cvtColor
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

如果我直接申请findContours(...),那么不使用cvtColor(...),我会得到一个不同的错误:

 error: (-210) [Start]FindContours supports only CV_8UC1 images when mode != CV_RETR_FLOODFILL otherwise supports CV_32SC1 images only in function cvStartFindContours_Impl
Run Code Online (Sandbox Code Playgroud)

一些来源建议使用 a来获取[1]threshold所需的二进制图像findContours(...) …

python opencv numpy

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

有没有更好的方式编写这些if语句

本质上,当对象经过时,这些if语句会迅速更改cv2线的颜色,问题是有4行,我想在颜色变为绿色之前和之后保持红色。

这不仅看起来很糟糕,而且可能没有效果

if counter is 1:
    cv2.line(input_frame, (line_pos1, 0), (line_pos1, height), line_col_green, line_size)
    cv2.line(input_frame, (line_pos2, 0), (line_pos2, height), line_col_red, line_size)
    cv2.line(input_frame, (0, line_pos4), (width, line_pos4), line_col_red, line_size)
    cv2.line(input_frame, (0, line_pos5), (width, line_pos5), line_col_red, line_size)
    lct1 += 1
if counter is 2:
    cv2.line(input_frame, (line_pos1, 0), (line_pos1, height), line_col_red, line_size)
    cv2.line(input_frame, (line_pos2, 0), (line_pos2, height), line_col_green, line_size)
    cv2.line(input_frame, (0, line_pos4), (width, line_pos4), line_col_red, line_size)
    cv2.line(input_frame, (0, line_pos5), (width, line_pos5), line_col_red, line_size)
    lct2 += 1
if counter is 3:
    cv2.line(input_frame, (line_pos1, 0), (line_pos1, …
Run Code Online (Sandbox Code Playgroud)

python opencv python-3.x

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

无法在C++ OpenCV HSV图像分离中分离对象

我有3个辣椒这个图像:

我需要将这张图片转换为HSV格式,然后将每个辣椒分成自己的图像.

到目前为止,我似乎能够很好地将红辣椒与其他红辣椒分开.但是,我似乎无法弄清楚如何分开其他辣椒.

这是我的代码:

#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/objdetect/objdetect.hpp>
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <cmath>
#include <string>
#include <vector>

int main(int argc, char *argv[]){
    cv::Mat im_in;
    cv::Mat hsv_in;
    cv::Mat bgr_in;
    cv::Mat orig_in;
    cv::Mat im_o1;
    cv::Mat im_o2;
    cv::Mat im_o3;
    // Read image
    if (argc<2){
    im_in = cv::imread("colorpeppers.jpg");
    }
    if (argc==2){
        im_in=cv::imread((argv[1]));
    }
    if (argc>2){
        std::cout<<"Error! Too many arguments!"<<std::endl;
    }
    if (im_in.empty()){
        std::cout << "error detected. something went wrong with opening the image. …
Run Code Online (Sandbox Code Playgroud)

c++ opencv filter

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

Boost - 周期性任务调度程序

我正在试图为周期性任务找出一个简单的调度程序.该想法是提供一种方法来安排std::function<void()>任何给定时间间隔的周期性执行,该时间间隔将是一秒的乘法.我试图使用boost :: asio来编写它,但到目前为止我最终会遇到奇怪的行为 - 只有两个计划任务中的一个被重复执行,但它不遵循间隔.

这是代码:

#include <functional>
#include <iostream>

#include <boost/asio.hpp>
#include <boost/bind.hpp>

class PeriodicTask
{
public: 
     PeriodicTask(boost::asio::io_service * ioService, int interval, std::function<void()> task)
     : ioService(ioService), 
       interval(interval), 
       task(std::make_shared<std::function<void()>>(task)),
       timer(std::make_shared<boost::asio::deadline_timer>(*ioService, boost::posix_time::seconds(interval)))
    {}

    void execute()
    {
        task->operator()();
        timer->expires_at(timer->expires_at() + boost::posix_time::seconds(interval));
        timer->async_wait(boost::bind(&PeriodicTask::execute,this));
    }

private:
     std::shared_ptr<boost::asio::io_service> ioService;
     std::shared_ptr<boost::asio::deadline_timer> timer;
     std::shared_ptr<std::function<void()>> task;
     int interval;
};

class PeriodicScheduler
{
public:
    void run()
    {
        for each (auto task in tasks)
        {
            task.execute();
        }
        io_service.run();
    }
    void  addTask(std::function<void()> task, int interval)
    {
        tasks.push_back(PeriodicTask(&io_service, interval, task)); …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading boost boost-asio c++11

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

使用python优化opencv的骨架功能

所以我在raspbian(raspberry pi 2模型B)上使用OpenCV.我正在进行视觉/图像处理,并且rasppi就是我所得到的(如果可以的话,我会使用计算机).

我需要运行一个骨架函数.我找到了以下实现:

import cv2
import numpy as np

img = cv2.imread('img.png',0)
size = np.size(img)
skeleton = np.zeros(img.shape,np.uint8)

ret,img = cv2.threshold(img,127,255,0)
kernel = cv2.getStructuringElement(cv2.MORPH_CROSS,(3,3))
finished = False

while(not finished):
    eroded = cv2.erode(img,kernel)
    temp = cv2.dilate(eroded,kernel)
    temp = cv2.subtract(img,temp)
    skeleton = cv2.bitwise_or(skeleton,temp)
    img = eroded.copy()

    zeros = size - cv2.countNonZero(img)
    if zeros==size:
        finished = True

cv2.imshow("skeleton",skeleton)
cv2.waitKey(0)
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)

当它运行时,它非常非常慢(不出所料)(我在此之前对图像进行FFT和带通滤波操作,然后运行骨架操作).其他代码很慢,但会完成操作.

图像很大 - 我可以裁剪一些,但我认为这还不够.我试图找到这个的优化版本,但到目前为止还没有提出任何建议.任何想法或解决方案?

python opencv image-processing

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

使用OpenCV将灰度图像转换为负片

我正在尝试制作一个简单的函数,使用openCV将灰度图像转换为负像.下面我有函数的代码:

#include "stdafx.h"
#include "common.h"
#include <opencv/cv.h>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
.........................................

void negative_image()
{
    Mat img = imread("Images/cameraman.bmp", CV_LOAD_IMAGE_GRAYSCALE);

    for (int i = 0; i < img.row; i++)
    {
        for (int j = 0; j < img.cols; j++)
        {
            img.at<uchar>(i, j) = 255 - img.at<uchar>(i, j);
        }
    }

    imshow("negative image", img);
    waitKey(0);
}
Run Code Online (Sandbox Code Playgroud)

当我尝试构建应用程序时,我收到以下错误:

在此输入图像描述

任何帮助表示赞赏!

c++ opencv

0
推荐指数
1
解决办法
6578
查看次数

如何在Python中去除该图像上的噪声?

我有以下图像:

图像

我想去除该图像中的一些噪点。我已经尝试使用 OpenCV 和以下代码:

cv2.fastNlMeansDenoisingColored(image_sharp, None, 2, 10, 7, 20)
Run Code Online (Sandbox Code Playgroud)

然而,返回给我的图像看起来完全相同:

去噪图像

有没有人有什么建议?

python opencv python-imaging-library

0
推荐指数
1
解决办法
81
查看次数