我想从转换ATL::CImage到cv::Mat图像处理OpenCV中(C ++)。你能帮忙转换这个对象吗?
我CImage从 Windows 屏幕截图中得到(使用 MFC)。然后,我想在 OpenCV Mat 对象中处理图像。
我不知道如何转换。
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::Image为cv::Mat …
我有一个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) 我是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) 我正在尝试使用cv2.drawContoursOpenCV中的功能显示填充轮廓。我已经从Canny检测得出的边缘图像中开发出轮廓列表,并且正在寻找RETR_EXTERNAL启用了层次结构定义的轮廓。但是,我遇到了一个问题,尽管-1在cv2.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所建议的格式,但结果如下图所示:
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) 这是带有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上运行
我正在构建一个网络应用程序来帮助学生学习数学.
该应用程序需要显示来自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) 我是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等。如果有人可以帮助我,我将非常感激。
我正在尝试使用 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) 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)
有人用过这个功能吗?
opencv ×8
c++ ×5
python ×3
atl ×1
boost ×1
boost-spirit ×1
draw ×1
graphics ×1
mfc ×1
namespaces ×1
numpy ×1
point ×1
pointers ×1
python-2.7 ×1
scikit-image ×1
vector ×1
whitespace ×1