小编Dan*_*šek的帖子

如何将 ATL::CImage 转换为 cv::Mat?

我想从转换ATL::CImagecv::Mat图像处理OpenCV中(C ++)。你能帮忙转换这个对象吗?

CImage从 Windows 屏幕截图中得到(使用 MFC)。然后,我想在 OpenCV Mat 对象中处理图像。

我不知道如何转换。

  • C++ 项目(VC 2017)
  • MFC
  • OpenCV 3.4.6

CImage image;
int cx;
int cy;
CWnd* pWndDesktop = CWnd::GetDesktopWindow();
CWindowDC srcDC(pWndDesktop);

Rect rcDesktopWindow;
::GetWindowRect(pWndDesktop->m_hWnd, %rcDesktopWindow);

cx = (rcDesktopWindow.right - rcDesktopWindow.left);
cy = (rcDesktopWindow.bottom - rcDesktopWindow.top);

image.create(cx, cy, srcDC.GetDeviceCaps(BITPIXEL));

CDC* pDC = CDC::FromHandle(image.GetDC());
pDC->BitBlt(0, 0, cx, cy, &srcDC, 0, 0, SRCCOPY);

image.ReleaseDC();

cv::Mat mat;

// I want set image to mat!
mat = image???
Run Code Online (Sandbox Code Playgroud)

无法转换ATL::Imagecv::Mat …

c++ mfc opencv atl

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

尝试将 push_back 到 std::vector 时出现分段错误

我有一个Token课程,其结构如下:

class Token {
    public:
        void* value;
        token_type type; // enum to know which type of data is it storing inside value
        unsigned int line;

        Token() = default;

        Token(void* new_value, token_type new_type):
            value(new_value), type(new_type)
            {}

        ~Token() {
            //free the memory occupied by the object pointed to by value based on it's type
            //this also handles the case of the Token being an instantiation of Statement
        }
};
Run Code Online (Sandbox Code Playgroud)

然后是类声明:

class Statement: public Token {
    public:
        std::vector<Token*>* list;
        unsigned int …
Run Code Online (Sandbox Code Playgroud)

c++ pointers vector segmentation-fault

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

使用Boost Spirit Qi解析一个parcticular字符串

我是Boost Spirit的新手,并且正在努力创建一个正确的表达式来解析以下输入(实际上是某个命令的stdout的结果):

^+ line-17532.dyn.kponet.fi      2   7   377     1   +1503us[+9103us] +/-   55ms
Run Code Online (Sandbox Code Playgroud)

我需要解析一组字符串和整数并记录在变量中.应该将大部分行解析为适当类型的变量(string或int).所以最后,我得到:

string:  "^+", "line-17532.dyn.kponet.fi", "+1503us", "+9103us", "55ms"
int   :   2, 7, 377, 1 
Run Code Online (Sandbox Code Playgroud)

这对

+1503us[+9103us] 
Run Code Online (Sandbox Code Playgroud)

也可以与空间

+503us[ +103us] 
Run Code Online (Sandbox Code Playgroud)

我需要在方括号之前和方括号中放置的东西放在单独的字符串中.

另外,时间指定可以表示为

ns, ms, us, s
Run Code Online (Sandbox Code Playgroud)

我很欣赏有关如何处理它的示例,因为可用的文档非常稀疏而且没有凝聚力.


大部分日志,以及描述各个字段的标题:

MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^+ ns2.sdi.fi                    2   9   377   381  -1476us[-1688us] +/-   72ms
^+ line-17532.dyn.kponet.fi      2  10   377   309   +302us[ +302us] +/-   59ms
^* heh.fi                        2  10   377   319  -1171us[-1387us] +/-   50ms
^+ stara.mulimuli.fi             3  10   377 …
Run Code Online (Sandbox Code Playgroud)

c++ boost boost-spirit boost-spirit-qi

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

cv2.drawContours将不会绘制填充轮廓

我正在尝试使用cv2.drawContoursOpenCV中的功能显示填充轮廓。我已经从Canny检测得出的边缘图像中开发出轮廓列表,并且正在寻找RETR_EXTERNAL启用了层次结构定义的轮廓。但是,我遇到了一个问题,尽管-1cv2.drawContours命令中使用了标志来指示填充的轮廓,但仅显示轮廓本身(即边缘)。例如:

mask = np.zeros(rawimg.shape, np.uint8)
cv2.drawContours(mask, contours[246], -1, (0,255,255), -1)
Run Code Online (Sandbox Code Playgroud)

结果仅显示轮廓246的轮廓。由于我仅检索外部轮廓,因此我认为看不到每个边缘处的内部轮廓和外部轮廓之间的差异,因此我对为什么显示轮廓但不填充为轮廓感到有些困惑该-1标志会建议它应该。


编辑: 完整的代码包含在下面。问题出在以下一行:cv2.drawContours(mask,cnt,2,(0,255,255),-1)虽然这是Dan所建议的格式,但结果如下图所示:

图片链接。cnt是单个轮廓,因此这是指轮廓中的单个点。当行更改为:

cv2.drawContours(mask, cnt, -1, (0,255,255), -1)
Run Code Online (Sandbox Code Playgroud)

轮廓将像以前一样打印,但是轮廓仍然没有填充,因为命令末尾的-1标志表明应该填充轮廓。

测试图片:

在这里上传

import os
import cv2
import numpy as np
from matplotlib import pyplot as plt
import copy as cp

path = 'C:\\Users\\...deleted...\\Desktop\\testimage6.jpg'



#Determine largest contour in the image
def maxContour(contours):
    cnt_list = np.zeros(len(contours))
    for i in range(0,len(contours)):
        cnt_list[i] = cv2.contourArea(contours[i])

    max_value = np.amax(cnt_list)
    max_index = np.argmax(cnt_list)
    cnt = …
Run Code Online (Sandbox Code Playgroud)

python opencv

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

opencv名称空间和c,c ++函数

这是带有opencv的测试程序。它不应该做任何事情。

#include <opencv2/opencv.hpp>

int main (){
    cv::Mat src;
    Mat dst; // <---- compile error (Mat not declared, suggested alternatives cv::)

    cvNamedWindow("A", CV_WINDOW_AUTOSIZE);
    cv::namedWindow("B", CV_WINDOW_AUTOSIZE);

    medianBlur(src,dst,3);

    imshow("A",src);
    cv::imshow("B", src);

}
Run Code Online (Sandbox Code Playgroud)

我用cmake编译并制作

cmake_minimum_required(VERSION 2.8)
project( opencvtest )
find_package( OpenCV REQUIRED )
add_executable( opencvtest main.cpp )
target_link_libraries( opencvtest ${OpenCV_LIBS} )
Run Code Online (Sandbox Code Playgroud)

Cmake可以正确运行。从代码中可以看到,该程序无需Mat dst声明即可正常运行。现在,它cvNamedWindow是一个C函数,因此不需要名称空间。imshow另一方面是C ++函数,因此它确实需要名称空间声明。http://docs.opencv.org/2.4/modules/highgui/doc/user_interface.html#imshow 那么为什么imshow没有命名空间声明会通过编译。同样的原因medianBlur甚至没有交流等效功能 http://docs.opencv.org/2.4/modules/imgproc/doc/filtering.html?highlight=medianblur#medianblur

我在3.1.0 opencv版本和ubuntu 16.04上运行

c++ opencv namespaces

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

检测图像中的单词和图形,并将图像切换为每个单词或图形1个图像

我正在构建一个网络应用程序来帮助学生学习数学.

该应用程序需要显示来自LaTex文件的数学内容.这些Latex文件渲染(精美)为pdf,我可以通过pdf2svg将其干净地转换为svg.

(svg或png或任何图像格式)图像看起来像这样:

 _______________________________________
|                                       |
| 1. Word1 word2 word3 word4            |
|    a. Word5 word6 word7               |
|                                       |
|   ///////////Graph1///////////        |
|                                       |
|    b. Word8 word9 word10              |
|                                       |
| 2. Word11 word12 word13 word14        |
|                                       |
|_______________________________________|
Run Code Online (Sandbox Code Playgroud)

真实的例子:


Web应用程序的目的是操作并向其添加内容,从而产生如下内容:

 _______________________________________
|                                       |
| 1. Word1 word2                        | <-- New line break
|_______________________________________|
|                                       |
| -> NewContent1                        |  
|_______________________________________|
|                                       |
|   word3 word4                         |  
|_______________________________________|
|                                       |
| -> NewContent2                        |  
|_______________________________________| …
Run Code Online (Sandbox Code Playgroud)

whitespace opencv image-processing edge-detection

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

Opencv / numpy问题:“模块是根据API版本X编译的,但此版本的numpy是Y”

我是opencv的新手,几天前我尝试安装它。我安装了所有内容并将cv2文件从opencv移至python 2.7。我厌倦了浏览这两个文件,但是现在我都出错了,我正在尝试使用x86文件夹中的文件cv2。每当我import cv2遇到此错误时:

RuntimeError: module compiled against API version 0xa but this version of numpy is 0x9

Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    import cv2
ImportError: numpy.core.multiarray failed to import
Run Code Online (Sandbox Code Playgroud)

我尝试了一切,安装了numpy 1.8,重新安装了它,重新安装了其他版本的python,将文件添加到环境变量中,但我在这里呆了将近一周。另外,我已经下载了cygwin64,但是删除python 3之后(也许是巧合),现在它找不到任何命令,例如pip install等。如果有人可以帮助我,我将非常感激。

opencv numpy python-2.7

3
推荐指数
2
解决办法
618
查看次数

有没有办法在OpenCV中制作一个抗锯齿圆

我正在尝试使用 Open CV 和 Python 在图片中画一个圆圈。

这是我希望我能制作的图片:

在此输入图像描述

这是我写的代码:

import cv2  
import numpy as np  
import imutils

text1 = "10x"  
text2 = "20gr"  

# Load image in OpenCV  
image = cv2.imread('Sasa.jfif')
resized = imutils.resize(image, width=500)
cv2.circle(resized,(350,150),65,(102,51,17),thickness=-1)

# Convert the image to RGB (OpenCV uses BGR)  
cv2_im_rgb = cv2.cvtColor(resized,cv2.COLOR_BGR2RGB)  

# Pass the image to PIL  
pil_im = Image.fromarray(cv2_im_rgb)  

draw = ImageDraw.Draw(pil_im)  
# use a truetype font  
font1 = ImageFont.truetype("arial.ttf", 50)  
font2 = ImageFont.truetype("arial.ttf", 25)  

# Draw the text  
draw.text((310,110), text1, font=font1) 
draw.text((325,170), …
Run Code Online (Sandbox Code Playgroud)

python opencv draw

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

OpenCV 点类型转换

OpenCV 文档表明,在 Point 类中,有一个可以在数据类型(int --> float 等)之间进行转换的成员函数。文档宣传了以下“转换为另一种数据类型”的功能。

cv::Point_< _Tp >::operator Point_< _Tp2 > () const
Run Code Online (Sandbox Code Playgroud)

我无法让它发挥作用。我已经尝试过以下方法。

cv::Point2i test(0,0);
cv::Point2f out;

test.Point <Point2f>;
Run Code Online (Sandbox Code Playgroud)

或者

cv::Point2i test(0,0);
cv::Point2f out;

test.operator Point<Point2f>;
Run Code Online (Sandbox Code Playgroud)

有人用过这个功能吗?

c++ opencv point

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

在skimage中绘制渐变椭圆

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

如下图所示: 椭圆渐变色

python graphics opencv scikit-image

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