ディスプレイとカメラ操作画面の読み込み中でいくつかの基本的な例示的な画像 - OpenCVの学習

免責事項:この記事はブロガーオリジナル記事ですが、許可ブロガーなく再生してはなりません。https://blog.csdn.net/sky_person/article/details/91349146

関連ヘッダファイル:

#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/imgcodecs/imgcodecs_c.h>

負荷に画像を表示します。

	std::string imgpath = "D:/lenna.jpg";
	IplImage* imgsrc = cvLoadImage(imgpath.c_str());
	cvShowImage("ImageProc", imgsrc);
	cv::waitKey(0);
	cvReleaseImage(&imgsrc);
	cvDestroyWindow("ImageProc");

写真ロード方法:

	cv::Mat in_image;
	std::string imgpath = "D:/lenna.jpg";
	in_image = cv::imread(imgpath.c_str());
	if (in_image.empty()) {
		std::cout << "Error! Input image cannot be read...\n";
		return -1;
	}
	cv::imshow("ImageProc", in_image);
	cv::waitKey(0);

カメラを開きます。

	cv::VideoCapture cap(0); //打开默认的摄像头号
	if (!cap.isOpened())  //检测是否打开成功
		return -1;
	cv::Mat frame;
	cv::namedWindow("ImageProc", 1);
	for (;;)
	{
		cap >> frame; // 从摄像头中获取新的一帧
		imshow("edges", frame);
		if (cv::waitKey(30) >= 0) break;
	}

シンプルなガウスぼかし処理された画像例:

	std::string imgpath = "D:/lenna.jpg";
	IplImage* imgsrc = cvLoadImage(imgpath.c_str());
	IplImage* out = cvCreateImage(cvGetSize(imgsrc), IPL_DEPTH_8U, 3);
	cvSmooth(imgsrc, out, CV_GAUSSIAN, 5, 5);
	cvShowImage("ImageProc", out);
	cv::waitKey(0);
	cvReleaseImage(&out);
	cvDestroyWindow("ImageProc");

画像cvCreateImageの半分を生成するために元の画像、cvPyrDownの写真

	IplImage* imgsrc = cvLoadImage(imgpath.c_str());
	IplImage* out = cvCreateImage(cvSize(imgsrc->width/2,imgsrc->height/2), imgsrc->depth, imgsrc->nChannels);
	cvPyrDown(imgsrc, out);
	cvShowImage("ImageProc", out);
	cv::waitKey(0);
	cvReleaseImage(&out);
	cvDestroyWindow("ImageProc");

キャンディエッジ検出例

	double lowThresh = 10, highThresh = 100, aperture = 3;
	IplImage* imgsrc = cvLoadImage(imgpath.c_str());
	IplImage* out = cvCreateImage(cvGetSize(imgsrc), imgsrc->depth, 1);
	cvCanny(imgsrc, out, lowThresh, highThresh, aperture);
	cvShowImage("ImageProc", out);
	cv::waitKey(0);
	cvReleaseImage(&out);
	cvDestroyWindow("ImageProc");

二回スケーリング、その後、検出キャンディエッジ:操作を組み合わせます

IplImage* doPyrDown(IplImage* in) {
	IplImage* out = cvCreateImage(cvSize(in->width/2,in->height/2),in->depth,in->nChannels);
	cvPyrDown(in, out);
	return out;
}

/* * *
* canny 处理图必须为灰度图
* * */
IplImage* doCanny(IplImage* in, double lowThresh, double highThresh, double aperture) {
	if (in->nChannels != 1)
		return 0;
	IplImage* out = cvCreateImage(cvGetSize(in), in->depth, 1);
	cvCanny(in, out, lowThresh, highThresh, aperture);
	return out;
}

int main(int argc, char** argv) 
{
	std::string imgpath = "D:/Engine/ImageProc/x64/Debug/lenna.jpg";
	IplImage* imgsrc = cvLoadImage(imgpath.c_str());
	IplImage* t1 = doPyrDown(imgsrc);
	IplImage* t2 = doPyrDown(t1);
	IplImage* t3 = doCanny(t2,10,100,3);
	cvShowImage("ImageProc", t3);
	cv::waitKey(0);
	cvReleaseImage(&imgsrc);
	cvReleaseImage(&t1);
	cvReleaseImage(&t2);
	cvReleaseImage(&t3);
	cvDestroyWindow("ImageProc");
}

おすすめ

転載: blog.csdn.net/sky_person/article/details/91349146