小编Pau*_*ers的帖子

基于颜色的OpenCV Edge/Border检测

我是OpenCV的新手,很高兴能够学到更多东西.我一直在想着勾勒出边缘,形状的想法.

我遇到过这个代码(在iOS设备上运行),它使用了Canny.我希望能够以彩色渲染它,并圈出每个形状.有人能指出我正确的方向吗?

谢谢!

IplImage *grayImage = cvCreateImage(cvGetSize(iplImage), IPL_DEPTH_8U, 1);
cvCvtColor(iplImage, grayImage, CV_BGRA2GRAY);
cvReleaseImage(&iplImage);

IplImage* img_blur = cvCreateImage( cvGetSize( grayImage ), grayImage->depth, 1);
cvSmooth(grayImage, img_blur, CV_BLUR, 3, 0, 0, 0);
cvReleaseImage(&grayImage);

IplImage* img_canny = cvCreateImage( cvGetSize( img_blur ), img_blur->depth, 1);
cvCanny( img_blur, img_canny, 10, 100, 3 );
cvReleaseImage(&img_blur);

cvNot(img_canny, img_canny);
Run Code Online (Sandbox Code Playgroud)

例如可能是这些汉堡肉饼.OpenCV会检测到patty并勾画它.在此输入图像描述

原始图片:

在此输入图像描述

c++ opencv edge-detection

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

当访问联合中不同类型的不同成员进行写入和读取操作时,C 和 C++ 中的未定义行为是否存在差异?

让我们立即开始示例代码:

#include <stdio.h>
#include <stdbool.h>

typedef union {
    bool b;
    int i;
} boolIntUnion;

int main(void) {
    boolIntUnion val;

    val.i = 0;
    printf("i = %d; %s\n", val.i, ((val.b) ? "true" : "false"));
    
    val.i = 1;
    printf("i = %d; %s\n", val.i, ((val.b) ? "true" : "false"));
    
    val.i = 2;
    printf("i = %d; %s\n", val.i, ((val.b) ? "true" : "false"));
}
Run Code Online (Sandbox Code Playgroud)

我现在的问题是,如果使用您在这里看到的联合是某种未定义的行为。我感兴趣的是第三种情况,我将其设置val.i2,但随后使用 union via 中的布尔值val.b作为打印字符串的条件。2在 MSVC 19 和 gcc 中,我得到了联合中的预期行为,导致了truefrom的值val.b,但是使用 …

c c++ clang

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

调用构造函数后,为什么initializer_list中的vector &lt;int&gt;的值会发生变化?

我是C ++的新手,正在尝试设置矩阵类。矩阵是从initializer_list包含vector<int>条目的矩阵行中创建的。此类的方法之一应该是get_row(size_t rownumber)。当我从构造函数调用实现的方法时,它将返回正确的结果。但是,当从中调用相同的方法时main(),每行的前两个元素包含一些不应在其中的巨大数字。

我认为问题与指针有关。虽然,我真的找不到在构造函数内部的调用和main内部的调用之间矩阵元素可以覆盖的地方。当我在Eclipse中进入调试模式时,指针似乎指向了预期的地址...

#include <iostream>
#include <vector>
using namespace std;

template<typename T> class myMatrix {
    private:
        initializer_list<vector<int>>::iterator it;
        initializer_list<vector<int>> matrix;
    public:
        myMatrix(initializer_list<T> values) {
        matrix = values;

        vector<int> chosen_row = get_row(1);
        cout << "Called from constructor: ";
        for (unsigned i = 0; i != chosen_row.size(); i++) {
            cout << chosen_row.at(i) << " ";
        }
        }
    vector<int> get_row(size_t x) {
        it = matrix.begin() + x - 1;
        return (*it);
        }
};

int …
Run Code Online (Sandbox Code Playgroud)

c++ vector initializer-list

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

在什么意义上,weak_ptr'拥有'一个shared_ptr?

我试着为这个问题写一个标题,比如10分钟,你会看到我最终失败了.[编者注:我认为我已经解决了这个问题.]

我正在阅读Herb Sutter的博客,主题是使用std :: make_shared及其缺点和优点.请看附上的照片:

在此输入图像描述

这是一篇非常有趣的文章的一小部分,我强烈建议人们阅读.我的问题是关于这句话:

"弱引用"计数用于跟踪当前正在观察对象的weak_ptrs的数量.当最后一个弱引用消失时,共享内务控制块被销毁并解除分配(并且如果共享对象尚未释放,则将其解除分配).**

我真的不明白这个说法.最初,当我们创建一个std::shared_ptrby,make_shared例如auto sp1 = make_shared<widget>();,当前没有弱ptrs正在观察sp1,所以当它shared_ptr以通常的方式超出范围时将被删除.

那么添加弱引用如何改变这种行为呢?有人能解释一下吗?

c++ shared-ptr weak-ptr make-shared c++11

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

如何在Windows上将Qt QString转换为LPCTSTR

我试图打开注册表并修改它.这是我打开注册表的方式:

HKEY hKey;
LPCTSTR subKey = TEXT("a registry subkey to be opened");
RegOpenKeyEx(HKEY_LOCAL_MACHINE, subKey, 0, KEY_ALL_ACCESS , &hKey);
Run Code Online (Sandbox Code Playgroud)

但这是一个问题,我想用a QString来实际更改子键.并把QString这样的:

QString subKeyString = QString("%1").arg(subKeyName);
LPCTSTR subKey = TEXT(subKeyString); //but it's not working here
Run Code Online (Sandbox Code Playgroud)

我想这是因为我没有改变QStringLPCTSTR,我尝试这个解决办法,但我仍然无法想出一个办法把自定义QStringTEXT宏.我不太确定引擎盖下的WinApi,我只是尝试了我可以做的事情.

有没有办法解决这个问题?

编辑:
这是我如何转换QStringLPCTSTR:

QString testString = "converting QString to LPCSTR";
QByteArray testStringArr = testString.toLocal8Bit();
LPCSTR lp = LPCSTR(testStringArr.constData()); //the QString is converted to LPCTSTR
//but when I put the LPCSTR to …
Run Code Online (Sandbox Code Playgroud)

c++ windows qt qt5

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

当光标移动到子窗口上时避免 WM_MOUSELEAVE

我正在使用 , 处理鼠标悬停/离开事件TrackMouseEventWM_MOUSEHOVER效果WM_MOUSELEAVE很好。

唯一的问题是,当鼠标悬停在任何窗口的子窗口上时,它会向正在跟踪鼠标的窗口发送一条WM_MOUSELEAVE消息。

我实际上理解 Windows 这样做的原因,但不知道如何解决它。谷歌搜索对我没有帮助。我相信解决方案非常简单,我只是错过了一些东西。我正在开发 Visual C++ Win32 应用程序。(没有MFC等)

我的代码:

void TrackMouse(HWND hwnd)
{
    TRACKMOUSEEVENT tme;
    tme.cbSize = sizeof(TRACKMOUSEEVENT);
    tme.dwFlags = TME_HOVER | TME_LEAVE;
    tme.dwHoverTime = 1; //How long the mouse has to be in the window to trigger a hover event.
    tme.hwndTrack = hwnd;
    TrackMouseEvent(&tme);
}
Run Code Online (Sandbox Code Playgroud)

WndProc:

case WM_MOUSEMOVE:
{
    if (!isTracking)
    {
        TrackMouse(hWnd);
        isTracking = true;
    }
    break;
}

case WM_MOUSEHOVER:
    ShowWindow(MouseIsOver, TRUE);
    break;

case WM_MOUSELEAVE:
    ShowWindow(MouseIsOver, FALSE); …
Run Code Online (Sandbox Code Playgroud)

c++ winapi

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

WinInet 只下载网页的一部分

我有一个将网页下载到文本文件的功能

#include <iostream>
#include <string>
#include <fstream>
#include <Windows.h>
#include <WinINet.h>

#pragma comment(lib, "WinINet.lib")
void Download(wstring url)
{
    std::ofstream fout(L"temp.txt");
    HINTERNET hopen = InternetOpen(L"MyAppName",
        INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
    if (hopen)
    {
        DWORD flags = INTERNET_FLAG_DONT_CACHE;
        if (url.find(L"https://") == 0)
            flags |= INTERNET_FLAG_SECURE;
        HINTERNET hinternet = InternetOpenUrl(hopen, url.c_str(), NULL, 0, flags, 0);
        if (hinternet)
        {
            char buf[1024];
            DWORD received = 0;
            while (InternetReadFile(hinternet, buf, sizeof(buf), &received))
            {
                if (!received) break;
                fout.write(buf, received);
            }
            InternetCloseHandle(hinternet);
        }
        InternetCloseHandle(hopen);
    }
    return;
}
Run Code Online (Sandbox Code Playgroud)

当我给它“ https://camelcamelcamel.com/Lodge-LMS3-Miniature-Skillet/product/B000LXA9YI …

c++ windows winapi wininet

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

错误:“FILE”没有名为“__fileL”的成员

我有一个程序版本,用于编译为 *.o 文件,但现在没有,并给出编译器错误。我曾尝试在 Linux 上使用 gcc 编译器编译我的代码,但编译失败。

我看到编译器错误:

dspter.c:209:18: error: ‘FILE’ has no member named ‘__fileL’
   lseek ((int)Ofd->__fileL, 1-sizeof(PDAY_REC99), SEEK_END);

dspter.c:220:13: error: ‘FILE’ has no member named ‘__fileL’
   lseek (Ofd->__fileL, 1-sizeof(PDAY_REC99), SEEK_END);
Run Code Online (Sandbox Code Playgroud)
Read99rec ()
{
    char    bf[20];

    if (curnt.ltype == LOAD_PDAY)
        {
        lseek ((int)Ofd->__fileL, 1-sizeof(PDAY_REC99), SEEK_END);
        fgets (Irec, sizeof(Irec), Ofd);
        memset (bf, NULL, sizeof (bf));
        memcpy (bf, Irec+2, 4);
        count01 += atoi(bf);
        memset (bf, NULL, sizeof (bf));
        memcpy (bf, Irec+6, 6);
        recs += atoi(bf);
        memset (bf, NULL, sizeof (bf));
        memcpy …
Run Code Online (Sandbox Code Playgroud)

c linux

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

如何在if语句中使用dynamic_cast

所以我有一个简单的任务要做.从一个基类派生出3个类.它们非常简单,将在下面提供.我需要做的是创建一个名为的新类PolymorphicAnimal,它将能够像animalAnimal基类派生的任何其他类一样运行.确切地说,他们需要做的就是在SoundOff调用方法后显示正确的文本.我猜我需要在dynamic_cast这里使用.我的问题是,什么是使用正确的语法dynamic_cast作为一个if声明,并尽一切派生类需要有至少一个虚拟方法呢?

#include "stdafx.h"
#include <iostream>
#include <string>

class Animal {
public:
virtual std::string SoundOff() = 0;
};

class Dog : public Animal {
std::string SoundOff() override { return "Woof"; }
};

class Cat : public Animal {
std::string SoundOff() override { return "Meow"; }
};

class Cow : public Animal {
std::string SoundOff() override { return "Muu"; }
};

class PolymorphicAnimal : public Animal {
std::string …
Run Code Online (Sandbox Code Playgroud)

c++ dynamic-cast class base-class

0
推荐指数
2
解决办法
1090
查看次数

为什么会出错:重新定义;y0 以前的定义是“函数”?

代码中唯一写的是:

#include <iostream>
using namespace std;


int x0, y0;
Run Code Online (Sandbox Code Playgroud)

当我编译时它给了我一个错误:'y0':redefinition; 以前的定义是“功能”

c++ compiler-errors

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