免責事項:この記事はブロガーオリジナル記事ですが、許可ブロガーなく再生してはなりません。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");
}