Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenCV可以使用C++;和C在一起 可以使用C++和C一起开发OpenCV吗?下面是我遇到这个问题的程序。它是用C编写的,运行良好。但是如果我使用 cv::Mat saveImage=cv::imread("D:\\opencvStudy\\opencv_test\\TaskDemo\\TaskDemo\\save.jpg"); cv::imshow("save",saveImage);_Opencv - Fatal编程技术网

OpenCV可以使用C++;和C在一起 可以使用C++和C一起开发OpenCV吗?下面是我遇到这个问题的程序。它是用C编写的,运行良好。但是如果我使用 cv::Mat saveImage=cv::imread("D:\\opencvStudy\\opencv_test\\TaskDemo\\TaskDemo\\save.jpg"); cv::imshow("save",saveImage);

OpenCV可以使用C++;和C在一起 可以使用C++和C一起开发OpenCV吗?下面是我遇到这个问题的程序。它是用C编写的,运行良好。但是如果我使用 cv::Mat saveImage=cv::imread("D:\\opencvStudy\\opencv_test\\TaskDemo\\TaskDemo\\save.jpg"); cv::imshow("save",saveImage);,opencv,Opencv,取代 IplImage* saveImge =cvLoadImage("D:\\opencvStudy\\opencv_test\\TaskDemo\\TaskDemo\\save.jpg"); cvShowImage("saveimage",saveImge); 我遇到了这样一个问题: < TaskDeMo.EXE中0x75 70963的强>未处理异常:微软C++异常:CV::内存位置0x00 39 eA0c.. > /p>异常 以下是整个节目。希望有人能帮助我。非常感谢 #include

取代

IplImage* saveImge =cvLoadImage("D:\\opencvStudy\\opencv_test\\TaskDemo\\TaskDemo\\save.jpg");
cvShowImage("saveimage",saveImge);
我遇到了这样一个问题:

< TaskDeMo.EXE中0x75 70963的强>未处理异常:微软C++异常:CV::内存位置0x00 39 eA0c.. <强> > /p>异常 以下是整个节目。希望有人能帮助我。非常感谢

#include<opencv/cv.h>
#include<opencv/highgui.h>
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/video/tracking.hpp"


#include <iostream>
#include <ctype.h>

CvPoint pt1 = cvPoint(0,0);
CvPoint pt2 = cvPoint(0,0);
bool is_selecting = false;

void cvMouseCallback(int mouseEvent,int x,int y,int flags,void* param)
{
switch(mouseEvent)
{
case CV_EVENT_LBUTTONDOWN:
    pt1 = cvPoint(x,y);
    pt2 = cvPoint(x,y);
    is_selecting = true;
    break;
case CV_EVENT_MOUSEMOVE:
    if(is_selecting)
        pt2 = cvPoint(x,y);
    break;
case CV_EVENT_LBUTTONUP:
    pt2 = cvPoint(x,y);
    is_selecting = false;
    break;
}
return;
 }

int main(int argc,char* argv[])
{
char img_path[80] = "D:\\opencvStudy\\pic\\boldt.jpg";
char save_path[80] = "save.jpg";
char* window = "img";

IplImage* img = cvLoadImage(img_path);  
IplImage* img_show = cvCloneImage(img);

cvNamedWindow(window,CV_WINDOW_AUTOSIZE);
cvSetMouseCallback(window,cvMouseCallback);

char text[80];
CvFont font;
cvInitFont(&font,CV_FONT_HERSHEY_PLAIN,1.0,1.0);
while(true)
{
    cvCopy(img,img_show);
    cvRectangle(img_show,pt1,pt2,cvScalar(255,255,255));
    sprintf(text,"roi = cvRect(%d,%d,%d,%d)",pt1.x,pt1.y,std::abs(pt2.x-pt1.x),std::abs(pt2.y-pt1.y));
    cvPutText(img_show,text,cvPoint(10,20),&font,cvScalar(0,0,255));

    cvShowImage(window,img_show);
    char key = cvWaitKey(10);
    if (key='r')
    {
        cvSetImageROI(img,cvRect(pt1.x,pt1.y,std::abs(pt2.x-pt1.x),std::abs(pt2.y-pt1.y)));
        cvSaveImage(save_path,img);
        cvResetImageROI(img);
        IplImage* saveImge = cvLoadImage("D:\\opencvStudy\\opencv_test\\TaskDemo\\TaskDemo\\save.jpg");

        cvShowImage("saveimage",saveImge);
        //cv::Mat saveImage=cv::imread("D:\\opencvStudy\\opencv_test\\TaskDemo\\TaskDemo\\save.jpg");
        //cv::imshow("save",saveImage);
    }
    else if(key==27)
        break;
}
cvReleaseImage(&img);
cvReleaseImage(&img_show);
return 0;
#包括
#包括
#包括“opencv2/highgui/highgui.hpp”
#包括“opencv2/imgproc/imgproc.hpp”
#包括“opencv2/video/tracking.hpp”
#包括
#包括
CvPoint pt1=CvPoint(0,0);
CvPoint pt2=CvPoint(0,0);
bool是_selection=false;
void-cvMouseCallback(int-mouseEvent、int-x、int-y、int-flags、void*param)
{
开关(mouseEvent)
{
案例CV\u事件\u LBUTTONDOWN:
pt1=Cv点(x,y);
pt2=Cv点(x,y);
是_=true;
打破
案例CV\u事件\u鼠标移动:
如果(正在选择)
pt2=Cv点(x,y);
打破
案例CV事件按钮:
pt2=Cv点(x,y);
is_selection=false;
打破
}
返回;
}
int main(int argc,char*argv[])
{
char img_path[80]=“D:\\opencvStudy\\pic\\boldt.jpg”;
char save_path[80]=“save.jpg”;
char*window=“img”;
IplImage*img=cvLoadImage(img_路径);
IplImage*img_show=cvCloneImage(img);
cvNamedWindow(窗口,CV_窗口_自动调整大小);
cvSetMouseCallback(窗口,cvMouseCallback);
字符文本[80];
CvFont字体;
cvInitFont(&font,CV_font_HERSHEY_PLAIN,1.0,1.0);
while(true)
{
cvCopy(img、img_-show);
cvRectangle(img_show,pt1,pt2,cvScalar(255255));
sprintf(文本,“roi=cvRect(%d,%d,%d,%d)”,pt1.x,pt1.y,std::abs(pt2.x-pt1.x),std::abs(pt2.y-pt1.y));
cvPutText(img_show,text,cvPoint(10,20),&font,cvScalar(0,0255));
cvShowImage(窗口、图像显示);
char key=cvWaitKey(10);
if(key='r')
{
cvSetImageROI(img,cvRect(pt1.x,pt1.y,std::abs(pt2.x-pt1.x),std::abs(pt2.y-pt1.y));
cvSaveImage(保存路径,img);
CVR图像ROI(img);
IplImage*saveImge=cvLoadImage(“D:\\opencvStudy\\opencv\u test\\TaskDemo\\TaskDemo\\save.jpg”);
cvShowImage(“saveimage”,saveImge);
//cv::Mat saveImage=cv::imread(“D:\\opencvStudy\\opencv\u test\\TaskDemo\\TaskDemo\\save.jpg”);
//cv::imshow(“保存”,saveImage);
}
否则如果(键==27)
打破
}
cvReleaseImage(&img);
cvReleaseImage(&img_show);
返回0;
}

更新

#include "opencv2/highgui/highgui.hpp"
#include "opencv2/core/core.hpp"
#include <iostream>
#include <ctype.h>

using namespace std;
using namespace cv;
cv::Point pt1=Point(0,0);
cv::Point pt2=Point(0,0);
bool is_selecting=false;

static void onMouse(int mouseEvent,int x,int y,int flags,void* param)
{
switch(mouseEvent)
{
case CV_EVENT_LBUTTONDOWN://CV_EVENT_LBUTTONDOWN
    pt1 = Point(x,y);
    pt2 = Point(x,y);
    is_selecting = true;
    break;
case CV_EVENT_MOUSEMOVE:
    if(is_selecting)
        pt2 = Point(x,y);
    break;
case CV_EVENT_LBUTTONUP:
    pt2 = Point(x,y);
    is_selecting = false;
    break;
}
}

int main()
{
cv::Mat img=cv::imread("D:\\opencvStudy\\pic\\boldt.jpg");
cv::Mat img_show=img.clone();

cv::namedWindow("Task2",0);
cv::setMouseCallback("Task2",onMouse,0);

char text[80];
while(true)
{
    img.copyTo(img_show);
    cv::rectangle(img_show,pt1,pt2,cv::Scalar(255,255,255));
    sprintf(text,"roi = cvRect(%d,%d,%d,%d)",pt1.x,pt1.y,std::abs(pt2.x-pt1.x),std::abs(pt2.y-pt1.y));
    cv::putText(img_show,text,cvPoint(10,20),10,10,Scalar(0,0,255));
    cv::imshow("Task2",img_show);
    char key=cv::waitKey(10);
    if (key='r')
    {
        cv::Mat save=img(cv::Rect(pt1.x,pt1.y,std::abs(pt2.x-pt1.x),std::abs(pt2.y-pt1.y)));
        cv::imwrite("save.jpg",save);
        cv::Mat saveImage=cv::imread("D:\\opencvStudy\\opencv_test\\TaskDemo\\TaskDemo\\save.jpg");
        cv::imshow("save",saveImage);
    }
    else if(key==27)
        break;
}
return 0;
#包括“opencv2/highgui/highgui.hpp”
#包括“opencv2/core/core.hpp”
#包括
#包括
使用名称空间std;
使用名称空间cv;
cv::点pt1=点(0,0);
cv::点pt2=点(0,0);
bool是_selection=false;
鼠标上的静态void(int mouseEvent、int x、int y、int标志、void*param)
{
开关(mouseEvent)
{
案例CV_事件_LBUTTONDOWN://CV_事件_LBUTTONDOWN
pt1=点(x,y);
pt2=点(x,y);
是_=true;
打破
案例CV\u事件\u鼠标移动:
如果(正在选择)
pt2=点(x,y);
打破
案例CV事件按钮:
pt2=点(x,y);
is_selection=false;
打破
}
}
int main()
{
cv::Mat img=cv::imread(“D:\\opencvStudy\\pic\\boldt.jpg”);
cv::Mat img_show=img.clone();
cv::namedWindow(“任务2”,0);
cv::setMouseCallback(“Task2”,onMouse,0);
字符文本[80];
while(true)
{
影印复制(影印秀);
cv::矩形(img_show,pt1,pt2,cv::标量(255255));
sprintf(文本,“roi=cvRect(%d,%d,%d,%d)”,pt1.x,pt1.y,std::abs(pt2.x-pt1.x),std::abs(pt2.y-pt1.y));
cv::putText(img_show,text,cvPoint(10,20),10,10,Scalar(0,0255));
cv::imshow(“任务2”,img_show);
char key=cv::waitKey(10);
if(key='r')
{
cv::Mat save=img(cv::Rect(pt1.x,pt1.y,std::abs(pt2.x-pt1.x),std::abs(pt2.y-pt1.y));
cv::imwrite(“save.jpg”,save);
cv::Mat saveImage=cv::imread(“D:\\opencvStudy\\opencv\u test\\TaskDemo\\TaskDemo\\save.jpg”);
cv::imshow(“保存”,saveImage);
}
否则如果(键==27)
打破
}
返回0;

}问题在于标题冲突。您不应该像这样同时包括旧的和新的:

#include<opencv/cv.h>
#include<opencv/highgui.h>
#include "opencv2/highgui/highgui.hpp"
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

请注意,字体(我使用的)不是10,而是font\u HERSHEY\u PLAIN(或其他字体常量)。

对此并不完全确定,但您是否尝试过包含opencv2/core?我认为cv::Mat在这里有定义,但其他包含可能就足够了。在任何情况下,通常认为混合这两种方法是一个坏主意,你应该坚持一种或另一种。OpenCV的C和C++接口可以安全地一起使用,并且它们被用在许多应用程序中,甚至OpenCV样本中。所以错误一定在你的代码中。@sammy错误在冲突的包含处,你可以查看我的答案以了解详细信息。
#include
在你的代码中有什么作用?我尝试过,但是仍然失败了以下错误:在TaskDeMo.EXE中的0x75 70963未处理异常:微软C++异常:CV::内存位置0x02DE310异常……是否排除了所有的头文件?“非常感谢!现在我试着用C++接口重写它,但是仍然遇到同样的问题。看看我的更新,你的方法很好,几乎就在那里。我已经更新了我的答案。非常感谢!C和C++在OpenCV中不能混合在一起,可以编译成功,但仍然存在执行中的问题。
#include <sstream>
//...
stringstream ss;
ss << "Rect(" << pt1.x << ", " << ... << ")";
//...
putText(img_show, ss.str(), Point(10,20), FONT_HERSHEY_PLAIN, 1, Scalar(0, 0, 255) );